- 主题:终于想明白协程了。
想问问大佬,操作系统内核是怎么调度进程和线程的,CPU在执行代码的时候不是对所有代码一视同仁的吗,用户程序不交还控制权不就完了吗。难道是一些硬件寄存器做一些标记代码的优先级,给一些特殊代码留着访问,然后普通程序编译的时候不让用这些寄存器?
【 在 speedboy2998 的大作中提到: 】
: 不得不说,人的思维定式还是很害人。
: 我当年毕业的时候,多线程还不普及,我狠下功夫研究了IOCP以及EPOLL,当时的EPOLL都还没有正式进入LINUX内核,需要自己编译内核来支持。整个公司的一套通讯平台底层基础库就是我封装的,对业务层提供统一接口,底层分别支持IOCP和EPOLL(和ASIO一个思想),我当时对多线程和SOCKET了解得特别透彻,也非常不明白为啥很多人不理解多线程。
: 现在遇到协程,我发现我也死活理解不了这玩意儿,不由得哀叹自己老了。但是突然有一天一下子明白了,协程和线程核心区别其实就是:线程是内核创建并调度的,内核根据算法来pause/resume某个线程,线程中的代码随时都可能被内核pause,过一会儿又回来从之前pause的地方接着执行,programmer 不用管什么时候代码被暂停执行,什么时候被恢复执行。
: ...................
--
FROM 42.227.187.*
协程这个概念刚抛出来的时候我一看就知道这不过是win3.x时代的协同式多任务的旧瓶装新酒而已。
【 在 speedboy2998 的大作中提到: 】
: 不得不说,人的思维定式还是很害人。
: 我当年毕业的时候,多线程还不普及,我狠下功夫研究了IOCP以及EPOLL,当时的EPOLL都还没有正式进入LINUX内核,需要自己编译内核来支持。整个公司的一套通讯平台底层基础库就是我封装的,对业务层提供统一接口,底层分别支持IOCP和EPOLL(和ASIO一个思想),我当时对多线程和SOCKET了解得特别透彻,也非常不明白为啥很多人不理解多线程。
: 现在遇到协程,我发现我也死活理解不了这玩意儿,不由得哀叹自己老了。但是突然有一天一下子明白了,协程和线程核心区别其实就是:线程是内核创建并调度的,内核根据算法来pause/resume某个线程,线程中的代码随时都可能被内核pause,过一会儿又回来从之前pause的地方接着执行,programmer 不用管什么时候代码被暂停执行,什么时候被恢复执行。
: ...................
--
FROM 180.102.55.*
lz可以再看看protothread
--
FROM 49.5.130.*
【 在 pabkyh 的大作中提到: 】
: 想问问大佬,操作系统内核是怎么调度进程和线程的,CPU在执行代码的时候不是对所有代码一视同仁的吗,用户程序不交还控制权不就完了吗。难道是一些硬件寄存器做一些标记代码的优先级,给一些特殊代码留着访问,然后普通程序编译的时候不让用这些寄存器?
:
:
分时多任务操作系统, 时间是分片的, 每次给你多少时间片,用完了或者主动放弃了就后边排队去,等下次分配,所以没有什么不交控制权的事情。
--
FROM 115.171.244.*
学习了
【 在 speedboy2998 的大作中提到: 】
: 不得不说,人的思维定式还是很害人。
: 我当年毕业的时候,多线程还不普及,我狠下功夫研究了IOCP以及EPOLL,当时的EPOLL都还没有正式进入LINUX内核,需要自己编译内核来支持。整个公司的一套通讯平台底层基础库就是我封装的,对业务层提供统一接口,底层分别支持IOCP和EPOLL(和ASIO一个思想),我当时对多线程和S
: OCKET了解得特别透彻,也非常不明白为啥很多人不理解多线程。
: ...................
--
FROM 136.56.52.*
用户程序在执行的时候,cpu不是all-in吗,背后还有一只手?
【 在 poggy 的大作中提到: 】
: 分时多任务操作系统, 时间是分片的, 每次给你多少时间片,用完了或者主动放弃了就后边排队去,等下次分配,所以没有什么不交控制权的事情。
: --
- 来自 水木说
--
FROM 42.227.187.*
确实如此。但神奇的是这么好用的东东。业界花了三十年还没普及。
【 在 lvsoft 的大作中提到: 】
: 协程这个概念刚抛出来的时候我一看就知道这不过是win3.x时代的协同式多任务的旧瓶装新酒而已。
: 蚐OCKET了解得特别透彻,也非常不明白为啥很多人不理解多线程。
: 葱校琾rogrammer 不用管什么时候代码被暂停执行,什么时候被恢复执行。
: ...................
--
FROM 183.253.147.*
时钟中断。
【 在 pabkyh 的大作中提到: 】
: 用户程序在执行的时候,cpu不是all-in吗,背后还有一只手?
:
: - 来自 水木说
--
FROM 221.221.53.*
其实也是接口设计得不易用
await这玩意又别扭又传染
【 在 speedboy2998 的大作中提到: 】
: 不得不说,人的思维定式还是很害人。
: 我当年毕业的时候,多线程还不普及,我狠下功夫研究了IOCP以及EPOLL,当时的EPOLL都还没有正式进入LINUX内核,需要自己编译内核来支持。整个公司的一套通讯平台底层基础库就是我封装的,对业务层提供统一接口,底层分别支持IOCP和EPOLL(和ASIO一个思想),我当时对多线程和S
: OCKET了解得特别透彻,也非常不明白为啥很多人不理解多线程。
: ...................
--
FROM 124.126.1.*
【 在 speedboy2998 的大作中提到: 】
: 不得不说,人的思维定式还是很害人。
: 我当年毕业的时候,多线程还不普及,我狠下功夫研究了IOCP以及EPOLL,当时的EPOLL都还没有正式进入LINUX内核,需要自己编译内核来支持。整个公司的一套通讯平台底层基础库就是我封装的,对业务层提供统一接口,底层分别支持IOCP和EPOLL(和ASIO一个思想),我当时对多线程和SOCKET了解得特别透彻,也非常不明白为啥很多人不理解多线程。
: 现在遇到协程,我发现我也死活理解不了这玩意儿,不由得哀叹自己老了。但是突然有一天一下子明白了,协程和线程核心区别其实就是:线程是内核创建并调度的,内核根据算法来pause/resume某个线程,线程中的代码随时都可能被内核pause,过一会儿又回来从之前pause的地方接着执行,programmer 不用管什么时候代码被暂停执行,什么时候被恢复执行。
: ...................
这东西这么简单啊
python都进入标准库很多年了, c++标准这么滞后
协程,协程, 在于协这个字, 它和线程最直接的区别也在这里,
对于多任务, 一个是协作式, 一个式抢占式, 前者早期windows, win3.1,win3.2的十代的多进程采用的, win95,nt十代就是抢占式, 通俗一点讲, 就是协作就像上厕所, 你占着坑不放, 别的协程就用不了。抢占式, 就像住店, 到期赶人。
--
FROM 115.171.244.*