<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE chapter SYSTEM "chapter.dtd">

<chapter>
  <header>
    <copyright>
      <year>2012</year><year>2021</year>
      <holder>Ericsson AB. All Rights Reserved.</holder>
    </copyright>
    <legalnotice>
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
 
          http://www.apache.org/licenses/LICENSE-2.0

      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License.

    </legalnotice>

    <title>Communication in Erlang</title>
    <prepared>Rickard Green</prepared>
    <responsible></responsible>
    <docno></docno>
    <approved>uy</approved>
    <checked></checked>
    <date>2012-12-03</date>
    <rev>PA1</rev>
    <file>communication.xml</file>
  </header>
  <p>Communication in Erlang is conceptually performed using
     asynchronous signaling. All different executing entities,
     such as processes and ports, communicate through asynchronous
     signals. The most commonly used signal is a message. Other
     common signals are exit, link, unlink, monitor, and demonitor
     signals.</p>

  <section>
    <title>Passing of Signals</title>
    <p>
      This information has been moved to the
      <seeguide marker="system/reference_manual:processes#signal-delivery">
	<i>Signals</i> section of the <i>Processes</i> chapter
	in the <i>Erlang Reference Manual</i></seeguide>.
    </p>
  </section>

  <section>
    <title>Synchronous Communication</title>
    <p>
      This information has been moved to the
      <seeguide marker="system/reference_manual:processes#sync-comm">
	<i>Signals</i> section of the <i>Processes</i> chapter
	in the <i>Erlang Reference Manual</i></seeguide>.
    </p>
  </section>

  <section>
    <title>Implementation</title>
    <p>The implementation of different asynchronous signals in the virtual
    machine can vary over time, but the behavior always respects this
    concept of asynchronous signals being passed between entities
    as described above.</p>

    <p>By inspecting the implementation, you might notice that some
    specific signal gives a stricter guarantee than described
    above. It is of vital importance that such knowledge about the
    implementation is <em>not</em> used by Erlang code, as the
    implementation can change at any time without prior notice.</p>

    <p>Examples of major implementation changes:</p>

    <list type="bulleted">
      <item>As from ERTS 5.5.2 exit signals to processes are truly
      asynchronously delivered.</item>
      <item>As from ERTS 5.10 all signals from processes to ports
      are truly asynchronously delivered.</item>
    </list>
  </section>
</chapter>

