课程咨询 :13623629309

太原PHP培训 > 达内新闻 > 太原php培训机构:网络协程编程
  • 太原php培训机构:网络协程编程

    发布:太原PHP培训      来源:伯乐在线      时间:2016-08-23

  • 十二、有效使用多核

    太原php培训班

    每个线程一个独立的协程调度器,通过创建多个线程使用多核

    使用 acl master 服务器框架,创建多进程使用多核,每个进程一个协程调度器

    多线程示例参见:acl/lib_fiber/samples/redis_threads

    多进程示例参见:acl/lib_fiber/samples/master_fiber

    十三、协程同步原语

    太原php培训机构

    基于协程的协程锁:

    1、协程互斥锁

    2、协程读写锁

    十四、协程挂起与唤醒

    — 协程挂起方式

    1、主动让出 CPU 控制权

    当前运行的协程通过调用 acl_fiber_yield 主动让出 CPU 控制权,协程调度器调用别的协程

    2、指定休眠时间

    当前运行的协程通过调用 acl_fiber_sleep 使当前协程休眠指定时间

    3、IO阻塞被挂起

    当前运行的协程等待IO完成时,需要将自身挂起

    — 协程唤醒方式

    1、主动 yield 的协程又重新获得 CPU 控制权

    2、处于休眠状态的协程时间到达

    3、因IO阻塞而被挂起的协程因IO准备好而被唤醒

    示例参考:

    1、yield 方式:acl/lib_fiber/samples/fiber

    2、sleep 方式:acl/lib_fiber/samples/sleep

    3、IO 方式:acl/lib_fiber/samples/select

    十五、过载保护

    太原php培训

    十六、协程间通信

    协程间为什么需要通信?

    1、业务逻辑的模块化

    2、业务模块的分层设计

    3、团队开发的协作性

    协程间“通信”的本质:

    – 协程间数据的传递通过协程上下文的切换,本质上是协程间的数据交换

    协程间“通信”的成本:

    1、协程上下文切换

    2、内存分配、释放

    3、数据拷贝

    协程间“通信”方式:

    – 支持多对多数据交互

    太原php培训机构

    – 协程通信管道支持多对多方式

    – 协程间通信通过切换协程上下文及数据交换完成

    – 协程间通信时的数据交换支持缓冲模式

    – 协程间通信时的数据交换采用随机分配方式

    十七、线程间通信

    协程模式下为何需要线程间通信?

    – 为使用多核,开启多个线程,线程间需要交换数据

    – 有些任务需要在线程池里异步完成,结果需要传递给主线程

    协程模式下线程间的通信方式:

    – 无锁消息队列 + IO 模式

    十八、线程间通信

    太原php培训机构

    1、生产者/消费者之间优先通过无锁队列进行数据传递

    2、当生产者无数据时,消费者通过IO堵塞

    3、当消费者堵塞在IO等待新消息时,生产者若有新消息则通过IO通知消费者

    4、无锁队列利用率越高,则处理性能越高

    十九、应用场景

    (一)、问答式应用服务

    基于 HTTP 协议的服务应用,诸如:网站

    基于 SMTP/POP3/IMAP 协议的服务应用

    (二)、生产者 – 消费者类应用服务

    如消息队列类应用

    (三)、reactor 和 proactor 两种模式的结合

    统一的事件引擎监控所有的网络连接,有一个连接就绪时创建协程独立处理

    此类应用如聊天服务、游戏服务等无状态的应用服务

    (四)、大并发类应用服务

    因为通过协程方式,将上层应用的堵塞式在底层转为非阻塞模式,所以非常容易以较低资源支持大并发类应用

    如内网的多数应用服务为提高效率都支持连接池模式,需要服务端支持非常大的并发

    (五)、网络限流

    在协程中可以直接 sleep,非常容易控制网络流量

    二十、协程编程注意事项

    (一)、协程运行堆栈空间的合理分配

    每个协程都需要分配一定的内存空间用于上下文的切换,如果分配大了则会造成内存浪费,分配小了可能造成意外不可恢复的崩溃

    一般情况下,每个协程分配32KB ~ 320KB

    (二)、协程间需要协作,防止有的忙死,有的饿死

    当协程长期占用 CPU 时,应该主动 yield 让出 CPU

    (三)、协程内防止有堵塞式操作,以防堵塞当前线程中的所有协程

    应通过对业务逻辑模块进行分类,确定不同的协程工作方式,使堵塞操作放在线程池中运行

    达内时代科技集团致力于培养面向电信和金融领域JavaC++C#/.Net3G/Android3G/IOSPHP、嵌入式、软件测试、UID、网络营销、网络工程、会计、UEDwebUnity3D、大数据、童程童美等17大方向中高端软件人才课程与少儿教育课程。选择太原php培训,不再孤军奋战,轻轻松松做IT高薪白领。太原达内培训带领有明确目标的学子迈向成功之路!想找工作的求职者可以加QQ3373924515(太原达内就业服务部)咨询了解。

上一篇:太原php培训班:网络协程编程(一)

下一篇:太原php培训班:一种工作流心跳机制的设计

最新开班日期  |  更多

php高级开发名企定制班(剩2个名额)

php高级开发名企定制班(剩2个名额)

开班日期:12-30

php高级开发周末班(剩5个名额)

php高级开发周末班(剩5个名额)

开班日期:12-30

php高级开发免费试听(剩5个名额)

php高级开发免费试听(剩5个名额)

开班日期:12-30

更多高级开发工程师精品班

更多高级开发工程师精品班

开班日期:12-30

  • 地址:山西省太原市小店区学府街长治路高新国际A座24层
  • 课程培训电话:13623629309     全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56

    在线客服系统