필요하면 하는거지. 니 스레드에서 sleep(0)이나 sleep(n)을 써서 얻고 싶은 효과가 뭔데
따봉고양이(gaq4zzfjr77j)2023-02-02 22:02
멀티쓰레딩에서 sleep(0)하면 다른 쓰레드로 점유권 넘겨주는건데... 웬만하면 별 문제 안되는데 규모 커지면 이게 버그의 시작이 됨. 그리고 sleep(n)은 쓰레드가 쉴때 그냥 쉬는게 아니라 cpu 부하주면서 쉬는거라서 sleep(n)이 이곳저곳 박혀있으면 성능하락이 필수적으로 발생할듯?
익명(210.204)2023-02-02 23:14
답글
sleep이 부하주면서 쉬는거라는데는 동의 못하겠다. while 루프 CPU 100% 먹는 코드에서 sleep(1) 만 넣어줘도 CPU 사용량 확 떨어지면서 부하 안걸리더라.
sleep은 비지 웨이팅으로 구현될 수도 있지만 대부분 네이티브쓰래드를 커널모드에서 waiting으로 바꿈
sleep(0)은 고전 c언어에서 쓰래드가 다른 쓰래드에게 프로세스를 넘겨주기 위해 썼는데 요즘 이렇게 안짜잖아
모던 c++11 부터는 쓰래드 넘겨주는건 std::this_thread::yield()를 쓰고 있고
어쨌는 쓰래드를 넘겨준다는거 부터
익명(117.111)2023-02-03 07:54
답글
문제임
요즘 비동기비동기 노래 부르면서
boost::asio나 async 기반으로 짜야
iocp나 epoll 혜택을 볼듯
필요하면 하는거지. 니 스레드에서 sleep(0)이나 sleep(n)을 써서 얻고 싶은 효과가 뭔데
멀티쓰레딩에서 sleep(0)하면 다른 쓰레드로 점유권 넘겨주는건데... 웬만하면 별 문제 안되는데 규모 커지면 이게 버그의 시작이 됨. 그리고 sleep(n)은 쓰레드가 쉴때 그냥 쉬는게 아니라 cpu 부하주면서 쉬는거라서 sleep(n)이 이곳저곳 박혀있으면 성능하락이 필수적으로 발생할듯?
sleep이 부하주면서 쉬는거라는데는 동의 못하겠다. while 루프 CPU 100% 먹는 코드에서 sleep(1) 만 넣어줘도 CPU 사용량 확 떨어지면서 부하 안걸리더라.
ㄴ 글쎄 sleep 호출할떼도 그렇고 쓰레드 블락하고 해제할때도 clock 많이 쓰고... 그렇다고 밀리초단위 제어도 힘들고 이래저래 안쓰게되는듯
Usleep 쓰라고 ㅋㅋ
sleep은 비지 웨이팅으로 구현될 수도 있지만 대부분 네이티브쓰래드를 커널모드에서 waiting으로 바꿈 sleep(0)은 고전 c언어에서 쓰래드가 다른 쓰래드에게 프로세스를 넘겨주기 위해 썼는데 요즘 이렇게 안짜잖아 모던 c++11 부터는 쓰래드 넘겨주는건 std::this_thread::yield()를 쓰고 있고 어쨌는 쓰래드를 넘겨준다는거 부터
문제임 요즘 비동기비동기 노래 부르면서 boost::asio나 async 기반으로 짜야 iocp나 epoll 혜택을 볼듯
근데 질문이 c인건 맞나?