对【线程】,【协程】 的一点理解, luikimfai(lkf) blog
2017-08-24 11:11
183 查看
最近接触【协程】,搞清楚概念, 查了一些资料:
1. 【协程】是什么:
a. 可以理解成【轻权线程】, 即【用户态线程】, 依赖用户或程序库调度, 开销比内核调度的【内核线程】小。
b. linux 2.6之后的版本, 调用系统调用创建的线程都是内核级线程。
2. 【协程】对比【线程】有什么好处:
a. 高并发, 例如连接服务器, 如果使用one thread per connection 模型可能会因频繁的上下问切换导致性能下降。
b. 线成的创建开销大(8m栈大小), 32位 3G 用户空间的系统 也就创建 300多个线程。 如果创建携程可以轻松建上万个。(印证开销小)
c. 同步编程, 示例可以看go 语言的 tls 握手代码。 完全同步写成。 如果用异步写将非常困难,且难读。(降低编程难度, 增加可读性)
3. 【协程】对比【线程】坏处:
a. 依赖用户或程序库调度。 某些情况可能不如依赖系统调度的线程高效。
b. 系统不知道用户层有多少协程, cpu时间分配可能较少。
3. 【协程】什么场景适用:
在我看来:
a. 单机高并发(io密集型)(连接服务器)
b. 复杂状态机编程(例如tcp握手,tls握手)
这两种场景。
4. 【协程】什么场景【不适用】:
a. cpu密集型(几个线程就跑满cpu)。 状态不复杂的程序。 (one thread per loop + 固定线程池)模型更加适用。
参考资料:
1. 在线学堂 操作系统 清华大学, 进程与线程部分。
2. 网络编程实践 63. 非阻塞IO之外的选择
3. Linux多线程服务端编程 使用muduo C++网络库 P80
4. https://zhihu.com/question/35128513/answer/148038406
对【线程】,【协程】 的一点理解, luikimfai(lkf) blog
1. 【协程】是什么:
a. 可以理解成【轻权线程】, 即【用户态线程】, 依赖用户或程序库调度, 开销比内核调度的【内核线程】小。
b. linux 2.6之后的版本, 调用系统调用创建的线程都是内核级线程。
2. 【协程】对比【线程】有什么好处:
a. 高并发, 例如连接服务器, 如果使用one thread per connection 模型可能会因频繁的上下问切换导致性能下降。
b. 线成的创建开销大(8m栈大小), 32位 3G 用户空间的系统 也就创建 300多个线程。 如果创建携程可以轻松建上万个。(印证开销小)
c. 同步编程, 示例可以看go 语言的 tls 握手代码。 完全同步写成。 如果用异步写将非常困难,且难读。(降低编程难度, 增加可读性)
3. 【协程】对比【线程】坏处:
a. 依赖用户或程序库调度。 某些情况可能不如依赖系统调度的线程高效。
b. 系统不知道用户层有多少协程, cpu时间分配可能较少。
3. 【协程】什么场景适用:
在我看来:
a. 单机高并发(io密集型)(连接服务器)
b. 复杂状态机编程(例如tcp握手,tls握手)
这两种场景。
4. 【协程】什么场景【不适用】:
a. cpu密集型(几个线程就跑满cpu)。 状态不复杂的程序。 (one thread per loop + 固定线程池)模型更加适用。
参考资料:
1. 在线学堂 操作系统 清华大学, 进程与线程部分。
2. 网络编程实践 63. 非阻塞IO之外的选择
3. Linux多线程服务端编程 使用muduo C++网络库 P80
4. https://zhihu.com/question/35128513/answer/148038406
对【线程】,【协程】 的一点理解, luikimfai(lkf) blog
相关文章推荐
- 进程、线程和协程的理解
- 进程、线程和协程的理解
- Python中理解进程(Process),线程(Thread)和协程(Coroutines)的感悟
- 进程、线程、协程基本概念理解
- 线程的一点理解
- 进程 线程 协程 管程 纤程 概念对比理解
- C#中线程锁的一点理解
- 进程、线程和协程的理解
- python 进程、线程和协程的理解(转)
- 对lua协程的一点理解
- 关于进程、线程、协程、管程、纤程、超线程的对比理解
- Qt4.7中,线程,信号,事件的一点理解
- 进程、线程和协程的理解
- 进程、线程和协程的理解
- 进程、线程和协程的理解
- Qt4.7中,线程,信号,事件的一点理解
- 一种自动分类数据方法2_判断模型好坏_学习曲线 luikimfai
- 进程、线程和协程的理解
- 一次 load average 飙升问题排查的 RCA, luikimfai
- 进程、线程和协程的理解