电子商务网站建设域名,职场社交网站怎么做,wordpress 定向次数过多,网站开发定制企业这里将以对话的形式进行#xff1a;
A#xff1a;
普通的线程是可以被其他线程中断掉的#xff0c;而基于select、epoll的事件处理函数实际上是不可以被其他事件#xff08;线程#xff09;中断的。
我这个理解对吗#xff1f;
B#xff1a;
图片里的应该是对是否…这里将以对话的形式进行
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