Erlang进程执行周期

比方说下面一段代码
make_process(List) when is_list(List)->

Pid1=spawn(fun()->do_action(List) end),
register(pid1,Pid1),
Pid2=spawn(fun()->do_action() end),
register(pid2,Pid2).

do_action(List)->

receive
    {ok,Data}->
        io:format("hello world!~n")
end,
do_action(List).

do_action()->

io:format("xxxxxxxx~n").

执行完毕后,通过is_process_alive(where(pid1))查看到pid1进程还在执行,pid2进程已经执行完毕后就不存在咯。
所以Erlang里面要生成一直运作的进程,就需要不断的循环执行,receive接受消息,接受消息后从消息信箱中删除,然后又
继续循环等待接受消息。这就是Erlang进程的生命周期。

时间: 2024-10-14 02:33:07

Erlang进程执行周期的相关文章

Android中进程生命周期的优先级

“我们不是生产者,我只是大自然的搬运工.” 学习Android最好的途径当然是强大的官方文档了,其中在Processes and Threads一节中对于进程生命周期淘汰优先级,有着详细的介绍.原文如下: Process lifecycle The Android system tries to maintain an application process for as long as possible, but eventually needs to remove old processes

Erlang进程堆垃圾回收机制

引言 在之前的文章中,我们介绍了如何使用Scala IDE也就是eclipse中集成的Scala开发插件来进行Scala语言程序的开发,在使用了一段时间之后,发现eclipse对Scala的支持并不是很好.用户体验比较差,比如联想速度比较慢等.由于在公司一直使用的Scala开发工具是Intellij IDEA(好吧,其实我使用Scala IDE的目的就是想试一下这两个各有什么优缺点),各方面感觉还不错,所以在此介绍一下这个开发环境. Intellij IDEA是jetbrain开发的一个IDE,

erlang进程与操作系统线程

erlang多进程与多线程: 在erlang开发中,我们面对的最小执行单位是进程,当然这个进程并不是系统层面上的进程,也不是线程.而是基于erlang运行时系统的一个进程.那么erlang的多进程是如何变成系统级别上的多线程,进而被多核处理器处理呢? 其实,我们每启动一个erlang VM,实际上就启动了模拟器+erlang运行时系统.而每个erlang运行时系统会启动N个进程调度器,每个进程调度器都是一个独立的操作系统线程.这个调度器会处理一个进程池,进程池里面是M个erlang进程.也就是说

从Erlang进程看协程思想

从Erlang进程看协程思想 多核慢慢火了以后,协程类编程也开始越来越火了.比较有代表性的有Go的goroutine.Erlang的Erlang进程.Scala的actor.windows下的fibre(纤程)等,一些动态语言像Python.Ruby.Lua也慢慢支持协程. 其实我们听过协程相关很多名词,下面大致来解释一下: OS进程: 进程是资源管理的最小单元,包括进程控制块(PCB).程序段.数据段 OS线程: 线程是程序执行的最小单元,由线程ID,当前指令指针(PC),寄存器集合和堆栈组成

Erlang进程间消息接收超时设定

Erlang消息接收函数,一般都会设计成尾递归调用自己的模式.但是这样的模式,如果没有消息则会无限的等待下去,所以为了不无限等待,这里可以加个超时设定,例如: flush() -> receive _ -> flush() after 1000 -> ok end. 有个特殊情况是,当超时时间设定为0时,程序不是立马退出,而是先将message box中的消息匹配完后,再返回. 更多进程消息信息请戳这里 Erlang进程间消息接收超时设定,布布扣,bubuko.com

在程序中使用命令打开一个进程和记录该进程执行日志

//在需要的程序中调用ExcutedCmd函数来打开执行dos命令 //cmd 命令  args 命令参数 private static void ExcutedCmd(string cmd, string args) { using (Process p = new Process()) { ProcessStartInfo psi = new ProcessStartInfo(cmd, args); psi.CreateNoWindow = true; psi.UseShellExecute

运行时修改TimerTask的执行周期

java.util.TimerTask类的执行周期period变量的声明如下: /** * Period in milliseconds for repeating tasks. A positive value indicates * fixed-rate execution. A negative value indicates fixed-delay execution. * A value of 0 indicates a non-repeating task. */ long peri

[C#] 等待启动的进程执行完毕

有能有时候我们启动了一个进程,必须等到此进程执行完毕,或是,一段时间, 关闭进程后再继续往下走. Example sample1 等待应用程序执行完毕 //等待应用程序执行完毕 private void btnProcessIndefinitely_Click(object sender, EventArgs e) { //配置文件案路径 string target = System.IO.Path.Combine(Application.StartupPath,@"Test.txt"

erlang进程监控:link和monitor

Erlang最开始是为了电信产品而发展起来的语言,因为这样的目的,决定了她对错误处理的严格要求.Erlang除了提供exception,try catch等语法,还支持Link和Monitor两种监控进程的机制,使得所有进程可以连接起来,组成一个整体.当某个进程出错退出时,其他进程都会收到该进程退出的消息通知.有了这些特点,使用erlang建立一个简单,并且健壮的系统就不是什么难事. 进程双向监控-Link link方式可以建立进程之间的双向链接关系,当其中一个进程退出时,另一个进程会收到该进程