首页 » 网站推广 » libeventmysqlphp技巧_libevent源码分析让libevent支持多线程

libeventmysqlphp技巧_libevent源码分析让libevent支持多线程

访客 2024-12-10 0

扫一扫用手机浏览

文章目录 [+]

2.1 暴力抢占

那么第一节中利用的多线程方法相称下面的流程:1 当时你正在干事,比如在写文档;2 你的头找到了一个任务,要指派给你,比如帮他搞个PPT,哈;3 头命令你立时搞PPT,你这是不得一直止手头的事情,把PPT搞定了再接着写文档;…

libeventmysqlphp技巧_libevent源码分析让libevent支持多线程

2.2 纯粹的关照机制

libeventmysqlphp技巧_libevent源码分析让libevent支持多线程
(图片来自网络侵删)

那么基于纯粹的关照机制的多线程办法就像下面这样:1 当时你正在写文档;2 你的头找到了一个任务,要指派给你,帮他搞个PPT;3 头发个到你信箱,有个PPT要帮他搞定,这时你并不鸟他;4 你写好文档,接着检讨创造头有个PPT要你搞定,你开始搞PPT;… 第一种的好处是可以立即得到处理,但是很方法很粗暴,你必须立即处理这个,以是你必须处理好切换问题,省得把文档上的内容欠妥心写到PPT里。
在操作系统的进程通信中,行列步队(信箱)都是操作系统掩护的,你不必关心。
第二种的优点是通过关照,切换问题省心了,不过是不能立即处理的(基于关照机制,这个总是难免的),而且所有的内容都通过发送,比如PPT的格式、内容等等信息,这无疑增加了通信开销。

2.3 关照+同步层

有个折中机制可以减少通信的开销,便是提取一个同步层,还拿上面的例子来说,你把事情安排都存放在一个事情行列步队中,而且你能够担保“任何人把新任务扔到这个行列步队”,“自己取出当前第一个任务”等这些操作都能够担保不会把行列步队搅散(实在便是个加锁的行列步队容器)。
再来看看处理过程和上面有什么不同:1 当时你正在写文档;2 你的头找到了一个任务,要指派给你,帮他搞个PPT;2 头有个PPT要你搞定,他把任务push到你的事情行列步队中,包括了PPT的格式、内容等信息;3 头发个(一个字节)到你信箱,有个PPT要帮他搞定,这时你并不鸟他;4 你写好文档,创造有新(这预示着有新任务来了),检讨事情行列步队知道头有个PPT要你搞定,你开始搞PPT;…事情行列步队实在便是一个加锁的容器(行列步队、链表等等),这个很随意马虎实现实现;而关照仅须要一个字节,详细的任务都push到了在事情行列步队中,因此想比2.2减少了不少通信开销。
多线程编程有很多陷阱,线程间资源的同步互斥不是一两句能说得清的,而且涌现bug很难跟踪调试;这也有很多的履历和教训,因此如果让我选择,在绝大多数情形下都会选择机制3作为实现多线程的方法。

须要C/C++ Linux做事器架构师学习资料私信“资料”(资料包括C/C++,Linux,golang技能,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享

3例子——memcached

Memcached中的网络部分便是基于libevent完成的,个中的多线程模型便是范例的关照+同步层机制。
下面的图足够解释其多线程模型了,个中有详细的笔墨解释。

4 小节

本节更是libevent的利用方面的技巧,谈论了一下如何让libevent支持多线程,以及几种支持多线程的机制,和memcached利用libevent的多线程模型。

标签:

相关文章

php反射用法技巧_php反射机制用法详解

面向工具编程中工具被授予了自省的能力,而这个自省的过程便是反射。反射,直不雅观理解便是根据到达地找到出发地和来源。比如,一个光秃秃...

网站推广 2024-12-12 阅读0 评论0