b 쓰레드는 대략 최대 200개 정도고 queue에 공유할 데이터를 삽입함 (초당 10개 넘음)
a 쓰레드는 하나고 pos 를 읽은담에 0보다 크면 queue에서 pop함 (1ms sleep하면서 루프돔)
크리티컬 섹션으로 a,b쓰레드 동기화를 해보았는데 너무 느린거같고 (a가 메인쓰레드임)
동기화를 풀자니 오작동하고..
뭐 다른 좋은수 없을까????
b 쓰레드는 대략 최대 200개 정도고 queue에 공유할 데이터를 삽입함 (초당 10개 넘음)
a 쓰레드는 하나고 pos 를 읽은담에 0보다 크면 queue에서 pop함 (1ms sleep하면서 루프돔)
크리티컬 섹션으로 a,b쓰레드 동기화를 해보았는데 너무 느린거같고 (a가 메인쓰레드임)
동기화를 풀자니 오작동하고..
뭐 다른 좋은수 없을까????
자바면 ConcurrentLinkedQueue 써 봐라
C++임
먼소리냐 코드를 써라
지금 니가 하고 있는게 최선인거 같은데... sleep 타임을 좀 늘려보든지, 한 번에 Queue에 있는거 다 읽어오든지 정도? 튜닝
어느 기준에서 느린지 기준을 제대로 만들어
쓰레드 왜케많냐.. 좀 줄여라
큐에 데이터 넣고 뺄때 동기화할때마다 1개 넣고 빼지말고 좀더 여러개 단위로 넣고 빼고 해봐라. 그럼 동기화 비용 조금이라도 줄일수 있다. 그리고 테스트 할때 당연이 딴짓안하고 순수하게 큐에 넣고 빼고만 하면 당연히 느려 보이지. 보통 저렇게 임계구역이 짧으면 서로 다른 스레드가 만날일이 적어서 스핀락쯤에서 끝나기 때문에 컨텍스트 스위칭 까지 안간다. 크리티컬 섹션이 스핀락-세마포어순이니까... 뭣하면 아예 spin락 만들어 쓰는 것도 좋다
스레드 200개는 뭐냐. 코어 2백개냐
그리고 아마 일반큐 말고 다른게 있을거다 pop/push 간 필요시에만 동기화 하는게 있을거야 찾아봐라