Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

添加 CountDownLatch #261

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

添加 CountDownLatch #261

wants to merge 1 commit into from

Conversation

zhcpku
Copy link

@zhcpku zhcpku commented Aug 30, 2021

添加了 CountDownLatch,一个类似 golang 中 sync.WaitGroup 的工具类

@dearbird
Copy link

  1. 为啥没有 WaitGroup的 add 接口,干脆类名就叫WaitGroup就好了。
  2. --mFlyingCount 操作不是原子的,多线程会有风险。是不是换成 atomic
  3. 直接yield,如果是任务比较少的情况下,cpu会占满吧?

@zhcpku
Copy link
Author

zhcpku commented Sep 1, 2021

  1. 为啥没有 WaitGroup的 add 接口,干脆类名就叫WaitGroup就好了。
    Add 必要性不是很大,只要初始化的时候制定要等待的coroutine就够用了
  2. --mFlyingCount 操作不是原子的,多线程会有风险。是不是换成 atomic
    Done
  3. 直接yield,如果是任务比较少的情况下,cpu会占满吧?
    task比线程数少的时候,增加睡眠等待

@dearbird
Copy link

dearbird commented Sep 1, 2021

  1. 动态创建携程的时候很有用,比如http 服务器, 可以等待所有请求都结束后再关闭服务。
  2. 这个实现感觉还是比较奇怪,为啥不采用信号的方式?比如wait 在channel 上, done 的时候写chan, wait 唤醒后检查下计数。

@zhcpku
Copy link
Author

zhcpku commented Sep 1, 2021

  1. 动态创建携程的时候很有用,比如http 服务器, 可以等待所有请求都结束后再关闭服务。
    原来是这种场景,可以的。
  2. 这个实现感觉还是比较奇怪,为啥不采用信号的方式?比如wait 在channel 上, done 的时候写chan, wait 唤醒后检查下计数。
    考虑过用n个不带缓冲的channel来实现,done的时候写,wait'里阻塞读,非常简单,但是开销比较大;用带缓冲的channel,检查size的话,还是要手动yield/sleep,就没有区别了啊

@dearbird
Copy link

dearbird commented Sep 1, 2021

换成在done 的时候判断计数为0再close chan, wait 直接block 在read chan 上?

@zhcpku
Copy link
Author

zhcpku commented Sep 1, 2021

换成在done 的时候判断计数为0再close chan, wait 直接block 在read chan 上?
这个好,一个计数器+一个chan就够了!

@zhcpku
Copy link
Author

zhcpku commented Sep 1, 2021

刚才还想到一种方式是,可以用一个不带缓冲的channel,由wait来写n次,done的时候读出来,不过这种会导致切换次数增加,不如上面的好

添加 CountDownLatch, 批量等待多个Coroutine结束
@zhcpku
Copy link
Author

zhcpku commented Sep 5, 2021

直接使用mutex+condition_variable的方案实现CountDownLatch

@yyzybb537 yyzybb537 force-pushed the master branch 2 times, most recently from f4a3d15 to 17d915b Compare March 10, 2023 05:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants