对于线程并发模型与事件并发模型的思考

这里将以对话的形式进行:

A:
在这里插入图片描述

普通的线程是可以被其他线程中断掉的,而基于select、epoll的事件处理函数实际上是不可以被其他事件(线程)中断的。

我这个理解对吗?

B:

图片里的应该是对是否可以并行,多路复用的说法,
传统的io操作,可以在主进程里串行等待执行完再处理下面的逻辑,但逻辑上没有强相关的情况,可以并行去执行各种io(用户态),而主进程或其他子线程可以继续做其他事
传统的io线程,主进程中是可以中断的,知道线程id,去中断就可以
而select, epoll 主要是为了实现多路复用吧,配有监听进程的,不会被其他线程中断的

A:

哦哦 那如果在bind cpu1的进程使用了epoll 并开启了监听 注册好了事件处理函数 那么触发多个事件的时候也只能顺序地在本cpu上挨个处理 不能扩散到其他cpu上 对吧?

在这里插入图片描述

看代码好像是这样。那这样的话 如果把一台机器上所有的核都用上 实际上就和多线程一样了。

B:

是的

A:

但是又有个问题 如果所有进程都在运行事件处理函数 那我此时再开启一个另外服务的进程不就是没用了吗 因为每个核都不可中断。这样只能等到某个核的事件处理函数搞好了才能让出cpu。

那么如果一个8核的cpu 8个核都被业务进程bind 然后事件处理函数中又有读取本机数据库的操作 但是数据库进程又不能占到cpu 这样不就系统不就死锁了吗。

感觉这样就很不合理。

B:

如果一个核上有进程在跑,那肯定是要等处理完,新的服务进程才能使用
8核的这种情况,如果一直没占用着,那肯定是需要扩容的,或者调成业务的逻辑。另外数据库的连接是在线程里处理的吧

A:

哦哦

或者把数据库放到云上 以网络请求的方式获取

这样一来我大概懂了

B:

嗯,数据库和业务服务是分开部署的

A:

这几天在看操作系统导论的 看到基于线程的服务器与基于事件的服务器的区别感觉不是很理解。

我之前学网络编程以及看公司里面的框架是基于事件的,就没见到过基于线程的。

基于线程的服务器里感觉应该用协程更好理解 显式yield而不是让操作系统进行切换。

B:

嗯,工业里肯定是基于事件的,各层之间是分开部署的,不会都揉在一起

A:

主要是我之前以为事件处理的时候是可以被其他进程中断的这样就不能理解为何阻塞了

B:

嗯,c++里的协程是一种方案,java里其实没协程,但可自己去实现

A:

嗯 协程我也没用过

23标准才比较全 20的协程还需要自己再封装

参考

https://zhuanlan.zhihu.com/p/32961438
http://t.zoukankan.com/feng9exe-p-10485519.html
https://blog.csdn.net/Chen4852010/article/details/123163903
http://www.imxmx.com/Item/1/117655.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cache 总结

这一文,让我们分析一下,《浅谈 Cache》 一文中的奇怪现象,事实上如今来看也并不奇怪了。在什么情况下 r1 和 r2 都为 0 呢?细致看代码,你会发现,两个线程分别被执行在不同的 CPU 核上,而且在线程…

c/c++常见类型转换错误

文章目录char转int 高位符号扩展有符号int与无符号int比较关于一个bit的位域变量的取值范围临时变量溢出size_t死循环char转int 高位符号扩展 int main() {char a 0x9A;int util;util (int)a;cout << a << endl;cout << util << endl;if (util >…

Javascript 装载和执行

一两个月前在淘宝内网里看到一个优化Javascript代码的竞赛&#xff0c;发现有不少的人对Javascript的执行和装载的基础并不懂&#xff0c;所以&#xff0c;从那天起我就想写一篇文章&#xff0c;但一直耽搁了。 首先&#xff0c;我想说一下Javascript的装载和执行。通常来说&am…

java sundry tips

1.关于Arrays 记得binarySearch方法返回的int 类型的数值的含义。 If the array contains multiple elements with the specified value, there is no guarantee which one will be found. 而且当查找数小于数组中任何一个数时返回-1 &#xff0c;当查找数大于数组中任何…

c++常见的10个类对象问题

文章目录1、对象的浅复制2、构造函数中的操作符重载3、拷贝构造函数不能模板化4、析构函数未捕获异常导致coredump5、构造函数抛出异常6、基类析构函数非虚导致内存泄漏7、删除void*指针引发内存泄露8、成员函数尾部缺失const9、使用memset初始化class10、对象向下转换失败1、对…

Ubuntu 14.10 -- 异次元软件世界

Ubuntu 14.10 中文桌面版/服务器正式版下载 - 华丽免费易于入门的 Linux 操作系统 [ 系统工具 - Linux // 2014-10-25 ]一说到 Linux&#xff0c;就不得不提目前最红火的 Ubuntu 发行版了&#xff01;它拥有绚丽的界面&#xff0c;甚至跟以时尚为卖点的 Mac OSX 相比也有过之而…

maven 概念

这里maven倡导约定优于配置&#xff0c;maven的约定就是以下目录结构src/main/java 下存放java类src/main/webapp 下存放页面文件(需要手动创建)src/main/resources 下存放资源文件src/test/java 下存放单元测试代码src/test/resources 下存放测试资源文件 Maven运行的生命周期…

System Design笔记:在线售票系统设计

文章目录何为在线售票系统&#xff1f;系统目标和要求1、功能要求2、非功能性需求3、设计注意事项4、容量估算5、系统API1.SearchMovies2.ReserveSeats6、数据库设计7、高级设计8、细节模块设计9、流程服务器如何跟踪所有尚未预订的active预订&#xff1f;服务器如何跟踪所有等…

Response.Write具体介绍

问题一&#xff1a; Response.Write 后连接Response.Redirect &#xff0c;则Response.Write无法显示&#xff0c;直接跳转入Response.Redirect 的页面。 解决方案&#xff1a; Response.Write("<script langugejavascript>alert(成功改动); window.location.hrefin…

SharePoint通过IP地址访问

问题&#xff1a;SP站点通过计算机名称可以访问&#xff0c;但不能通过IP地址访问 解决方案&#xff1a;打开SharePoint2010管理中心》应用程序管理》配置备用访问映射》编辑公用 URL 备用访问映射集&#xff1a;选择要映射的网站集 默认:http://计算机名 Intranet &#xff1a…

公有云与私有云的差别(转)

公有云与私有云的差别 发现每一个公司对私有云、公有云的定义都不一样&#xff0c;能够从公有云与私有云的差别上理解这个概念。下面转载网络上一个比較浅显的解释&#xff1a; 差别1&#xff1a;从云的建设地点划分&#xff0c;公有云——互联网上公布的云计算服务&#xff1b…

流媒体协议初探(MPEG2-TS、RTSP、RTP、RTCP、SDP、RTMP、HLS、HDS、HSS、MPEG-DASH)

目录一、综述需求分析协议定制二、MPEG2-TS协议三、RTSP协议、RTP、RTCP、SDPRTSPRTP、RTCP、SDP四、RTMP五、HLS、HDS、HSSHLSHDS和HSS六、MPEG-DASH协议具体内容应用七、流媒体服务器流媒体服务器的功能与挑战客户端支持协议支持应用场景应用特点扩展技术广告投放录屏其他一、…

eclipse偶尔会反映迟钝,直接无视其报错

比如&#xff0c;你在web.xml中配置了什么东西&#xff0c;在有的时候不一定就会立即被eclipse察觉到&#xff0c;即便你的配置正确了&#xff0c;甚至重启了几次服务器&#xff0c;它仍然给你报错 比如说&#xff0c;刚才我在web.xml中配置了一个taglib&#xff0c;并且tld文件…

Qos(Quality of Service)

QOS&#xff08;即Quality of Service&#xff0c;服务质量&#xff09;主要指网络环境下服务满足用户的程度&#xff0c;在视频服务的语境下也可认为是Quality of Streaming&#xff0c;即流媒体服务的质量。通常&#xff0c;QOS可以由一系列指标表达&#xff0c;如传输的速度…

Popline:帅气的浮动 HTML5 文本编辑器工具栏

Popline 是一个基于 HTML5 实现的富文本编辑器工具栏&#xff0c;设计灵感来自 PopClip &#xff0c;相比传统的文本编辑器工具&#xff0c;Popline 能够浮动在编辑的文本周围&#xff0c;操作起来十分方便。 您可能感兴趣的相关文章Metronic – 基于 Bootstrap 响应式后台管理…

C#反射Assembly 具体说明

1、对C#反射机制的理解 2、概念理解后&#xff0c;必须找到方法去完毕&#xff0c;给出管理的主要语法 3、终于给出有用的样例&#xff0c;反射出来dll中的方法 反射是一个程序集发现及执行的过程&#xff0c;通过反射能够得到*.exe或*.dll等程序集内部的信息。使用反射能够看到…

流媒体技术优化

文章目录1、下载策略优化CDN选择策略错误处理策略码率选择策略2、协议和架构优化HTTP2TCP变种拥塞控制QUIC架构流媒体协议的选择与分发体系架构的设计对优化起着关键作用。 HLS和DASH协议在点播和OTT直播服务中已逐渐占据主流&#xff0c;其思想主要是将视频转为不同码率并切为…

Android——android必看 各个控件属性(网上看到的文字,觉得挺好的,珍藏了)...

属性 值 说明 Android:orientation horizontal/vertical 设置布局水平还是垂直&#xff0c;默认是垂直 android:checked true/false 标记默认选中&#xff0c;如果是单选则选中最后一个 android:layout_gravity center/right/left/bottom/top 位置 android:gravity…

java中接口的定义与实现

1、定义接口 使用interface来定义一个接口。接口定义同类的定义类似&#xff0c;也是分为接口的声明和接口体&#xff0c;当中接口体由常量定义和方法定义两部分组成。定义接口的基本格式例如以下&#xff1a; [修饰符] interface 接口名 [extends 父接口名列表]{ [public] …

API设计笔记:pimpl技巧

pimpl pointer to implementation&#xff1a;指向实现的指针&#xff0c;使用该技巧可以避免在头文件暴露私有细节&#xff0c;可以促进API接口和实现保持完全分离。 Pimpl可以将类的数据成员定义为指向某个已经声明过的类型的指针&#xff0c;这里的类型仅仅作为名字引入&am…