Argon

Results 6 comments of Argon

> 兄弟你的miou都好高啊 我的miou才30多 可以简单说下你的训练咋做的吗 30多是不是自己换了BackBone然后改了Dataloader忘了归一化到[0, 1]?

这里不如改成主线程处理IO,这样就是一个典型的单Reactor多线程模型了。另外顺带一提,感觉项目的Proactor模式设计的也很奇怪,Proactor的核心是用户程序不负责阻塞IO,这里看来作者只是让线程池工作线程不负责IO了,主线程照样阻塞IO。再结合作者把Reactor模式写成工作线程处理阻塞IO,搞得好像Reactor模式和Proactor模式的区别是主线程还是工作线程处理阻塞IO一样,实际上我觉得不是这样。 当然这个项目其它大部分地方设计得都很好的。

个人觉得不算任何一种典型的Reactor模式。你说的单Reactor多线程模式是需要在主线程中处理IO的,这个项目的reactor模式把IO处理放在了子线程中

我又发现`threadpool::run()`还有一部分也有问题,明明已经wait到了semaphore,还要再判断一次队列非空: ```cpp m_queuestat.wait(); m_queuelocker.lock(); if (m_workqueue.empty()) { m_queuelocker.unlock(); continue; } ``` 我也想不到任何触发这个if的情况。我查了下,`sem_post()` 是只会唤醒一个线程的。而且,如果想要 `lock()`,必须要先 `wait()`,所以也不存在 `wait()` 醒来后 `lock()` 没抢过的情况。总之,就是怎么也不会存在**虚假唤醒**的情况。 我只能理解这里是在做防御性编程了。。 但是把,如果是防御性编程,`connection_pool::GetConnection()` 中也是有几乎一样的代码,不过,此时却又没有这样再次判断了。真的让人迷惑。

个人理解 accept 不过也是一种"读事件",既然是读时间,就存在 ET 和 LT 之分