[elixir! #0010] 漫话elixir源码之Task

什么是Task?

Task是指一些用来执行单一任务的进程, 它们通常很少和其它进程交流.

Task的作用是什么?

Task最主要的作用就是, 将顺序代码转换为并发代码. 在并发代码中, 我们不需要等前一步执行完毕, 就可以同时开始执行下一步; 最后收集一下各个Task的结果就行了.

图片描述

一个task的结构是什么样子?

 defstruct pid: nil, ref: nil, owner: nil

pid: 此task进程的pid.
ref: 此task的监视者.
owner: 此task的所有者.

Task模块里有哪些函数?

 @spec start_link(fun) :: {:ok, pid}
 @spec start_link(module, atom, [term]) :: {:ok, pid}

启动一个任务, 作为监督树的一部分.

 @spec start(fun) :: {:ok, pid}
 @spec start(module, atom, [term]) :: {:ok, pid}

启动一个任务.

 @spec async(fun) :: t
 @spec async(module, atom, [term]) :: t

启动一个任务, 它的返回值必须要在之后被收回(await).

 @spec await(t, timeout) :: term | no_return

等待一个任务的返回值. 超时了会报错.

 @spec yield(t, timeout) :: {:ok, term} | {:exit, term} | nil

等待一个任务的返回值. 超时不会报错.

 @spec yield_many([t], timeout) :: [{t, {:ok, term} | {:exit, term} | nil}]

在给定的时间内接受(yield)多个任务的返回值.

 @spec shutdown(t, timeout | :brutal_kill) :: {:ok, term} | {:exit, term} | nil

解除link并结束任务, 然后回复一个消息.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值