1개 스레드는 pop만 하고 200개 스레드는 push만 한다고?
그럼 이건 어떠냐
큐를 200개 만들어서 push스레드들은 각자 하나씩 할당
pop스레드는 200개에서 하나씩 빼온다
1:1 공유 인데, 그냥 spin락에서 해결될거 같지 않냐?
1개 스레드는 pop만 하고 200개 스레드는 push만 한다고?
그럼 이건 어떠냐
큐를 200개 만들어서 push스레드들은 각자 하나씩 할당
pop스레드는 200개에서 하나씩 빼온다
1:1 공유 인데, 그냥 spin락에서 해결될거 같지 않냐?
뭐 코어가 200개가 아니라고?
순서는 어케 보장?? ㅋㅋ 어차피 스레드가 200개인것도 너무 많은데 그놈들이 전부 write 연산 때리고 있으니 초당 10개씩이면 100ms 씩 들가는데 200개니 평균 인터벌 간격은 0.5ms ... 병목 날 확률 99% ㅋㅋ 콘텍스트 스위칭만 하다가 시간 다간다.
뭘하려는진 짐작이 안가지만 대개 생산자-소비자 모델은 소비자가 절대 다수인 write lock 스타일로 가지
어짜피 큐가 하나더라도 들어가는 순서가 만들어진 순서라는 보장은 없음.
큐200개면 1:1공유라 대부분 스핀락선에서 끝남. 스레드수가 실제 프로세서 보다 훨씬 많으면 큰일나겠지만
만약에 전제적으로 봤을때 queue[200]개에 들어 오는 순서대로 처리해야 한다면 그것도 다 가능하지 안되는게 어딨어
그냥 write 함수에 뮤텍스 걸면 끝나는 문제 아닐까?
http://gall.dcinside.com/board/view/?id=programming&no=384442&page=2
동기화는 push랑 pop에 뮤텍스 거는게 맞고, 이 방식은 그리 느리지 않음
1개큐를 공유 하는 경우 내가 제안한 방식에 비해 대기해야 할 확률은 n배(min(200, 실제 동시동작 가능 스레드수)더 크다