- 主题:c/c++的开发人员是不是越来越少了?
哦?用的什么原理吗?
我实现的协程 lock, event, condition, semaphore:
https://github.com/hgoldfish/qtnetworkng/blob/master/src/locks.cpp
【 在 ylh1969 (没谱) 的大作中提到: 】
: 这个功能实现了,没用协程锁。
--
FROM 110.85.22.*
那跟我用线程有什么区别?
【 在 hgoldfish 的大作中提到: 】
:
: 哦?用的什么原理吗?
:
: 我实现的协程 lock, event, condition, semaphore:
:
--
FROM 114.242.250.*
有的。我举个栗子。
比如经典的有两个内存里的帐户 A 和 B,一个协程从 A 转帐给 B,另一个协程从 B 转帐给 A,如果是线程,那需要对这两个帐号加锁,让操作串行化。而协程天然是串行化的,在这里不需要加锁。
但是考虑上面那个转钱的动作,加和减都是网络操作。在 A-money 的时候,阻塞住了,另一个协程正在执行 A+money,此时仍然需要加锁。
所以协程减少了锁的使用,但没有锁是万万不行的。
用协程操作界面很爽。比如:
auto r = http.get(url);
updateGUI(r.json());
如果网络操作在线程里面,就没法更新 GUI 了。这里减少了锁的使用。
【 在 hyperLee (老李) 的大作中提到: 】
: 那跟我用线程有什么区别?
--
FROM 140.224.34.*
协程有很多隐藏的好处:
1. 协程可中断(kill/cancel),因为协程阻塞一定发生在IO时。
2. 使用协程组织代码,能有效减少异步调用。写起来更舒服。
3. 因为都是同步调用,所以变量的生命周期非常清晰。进函数构造,出函数销毁。不容易发生泄露。
4. 因为变量生命周期容易管理。所以基本不需要 GC 的存在。引用计数绰绰有余。
5. 变量可以大部分分配在栈。使用 borrow 语义传递给被调用的函数。内存分配更为高效。
简而言之,协程是现在编程语言泥潭的大救星。不支持协程的语言,别学了。
【 在 hyperLee (老李) 的大作中提到: 】
: 那跟我用线程有什么区别?
--
FROM 140.224.34.*
re
一份工作是维护一个C++写的业务网关,基于libevent封装的网络程序。最大的问题就是逻辑散乱,维护困难,如果有协程,那就爽多了。
入职几天后,我跟同事说,是不是很期待协程,同事笑而不语。
我看到性能要求不高(每一台物理机峰值请求每秒10个)跟同事讲可不可以用Python重写,团队看不上Python,不过也考虑用go。
【 在 hgoldfish 的大作中提到: 】
: 协程有很多隐藏的好处:
: 1. 协程可中断(kill/cancel),因为协程阻塞一定发生在IO时。
: 2. 使用协程组织代码,能有效减少异步调用。写起来更舒服。
: ...................
--
FROM 203.18.50.*
python好慢,有的算法用python有点慢。。。
--
FROM 117.40.134.*
怎么保证两个协程在一个线程上执行的?
【 在 hgoldfish 的大作中提到: 】
: 有的。我举个栗子。
: 比如经典的有两个内存里的帐户 A 和 B,一个协程从 A 转帐给 B,另一个协程从 B 转帐给 A,如果是线程,那需要对这两个帐号加锁,让操作串行化。而协程天然是串行化的,在这里不需要加锁。
: 但是考虑上面那个转钱的动作,加和减都是网络操作。在 A-money 的时候,阻塞住了,另一个协程正在执行 A+money,此时仍然需要加锁。
: ...................
--
FROM 111.203.35.*
不支持协程在多个线程上执行就行了。
你看 nodejs 和 python 都是单线程的。
【 在 littleSram (littleSram) 的大作中提到: 】
: 怎么保证两个协程在一个线程上执行的?
--
FROM 140.224.34.*
放弃多核,一个进程只有一个线程,是吗?
【 在 hgoldfish 的大作中提到: 】
: 不支持协程在多个线程上执行就行了。
: 你看 nodejs 和 python 都是单线程的。
:
--
FROM 111.203.35.*