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

在Lab1的master.cpp中的多线程定时器效率太低 #1

Open
monifeng opened this issue May 2, 2023 · 4 comments
Open

在Lab1的master.cpp中的多线程定时器效率太低 #1

monifeng opened this issue May 2, 2023 · 4 comments

Comments

@monifeng
Copy link

monifeng commented May 2, 2023

在master.cpp中的waitMapTask() ,作者的定时器方式是构造一个线程,让线程执行等待时间的任务:

    pthread_create(&tid, NULL, waitTime, &op);
    pthread_join(tid, &status);  //join方式回收实现超时后解除阻塞

如果这样阻塞,和单线程的效率似乎是差不多的(甚至可能更差,涉及到线程上下文切换)?

因为在执行waitTime() 的时候,主线程就会一直阻塞。

我的想法是用epoll或者poll来通过定时事件触发(暂未实现),请问这样会不会更好呢?

@tjumcw
Copy link
Owner

tjumcw commented May 2, 2023

我觉得你说的没问题,我当时没考虑效率,本身后来也想改但是老是偷懒,后面的lab也有一些很多可以优化的地方。就是用epoll监听定时任务,timerfd_create应该能创建定时任务,然后用epoll监听定时事件,应该没问题。顺便说一嘴,我现在好久没碰cpp了,gpt了一下发现有这个timerfd_create系统调用

@monifeng
Copy link
Author

monifeng commented May 2, 2023

我觉得你说的没问题,我当时没考虑效率,本身后来也想改但是老是偷懒,后面的lab也有一些很多可以优化的地方。就是用epoll监听定时任务,timerfd_create应该能创建定时任务,然后用epoll监听定时事件,应该没问题。顺便说一嘴,我现在好久没碰cpp了,gpt了一下发现有这个timerfd_create系统调用

好的,非常感谢,确实如果从头开始做这个连框架和测试代码都没有的项目实在是太困难,有作者分享作为参考的确能少走很多弯路。

@tjumcw
Copy link
Owner

tjumcw commented May 3, 2023

加油

@monifeng
Copy link
Author

monifeng commented May 4, 2023

之前读源码没仔细读,并不会阻塞主线程,因为该计时线程在 waitMap() 函数里中已经detach了,只会阻塞单独的计时线程。

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

No branches or pull requests

2 participants