-
session의 send부분에 대한 고찰프로그래밍 2014. 11. 23. 22:01반응형
push_data 부분을 size만큼 메모리를 할당하고 데이터 복사를 하는 방식으로 구현한다면
여러 thread에서 send를 호출하더라도 queue에 순차적인 데이터 push가 보장된다.
push_data(data, size)
{
memory = new byte[size] // size만큼 메모리 할당
copy(data, memory) // 데이터 복사
send_queue.push(memory) // queue에 메모리를 push
}반면, push_data를 재귀하며 데이터를 고정된 버퍼에 담는 방식을 취한다면 순서가 섞일 수 있다.
push_data(data, size)
{
byte buf[128]
copy(data, buf)
send_queue.push(buf)
...
push_data(end, remain) // send버퍼에 복사되지 못한 부분은 push_data를 재귀호출하여 마저 복사
}
lock을 사용하면 어느 방식에도 안전하나 thread 대기로 인한 성능상의 문제가 있을 수 있다.
guard(send_mutex)
push_data(...);
고정적인 크기를 사용한다면, pool을 이용할 수 있으나 유동적 크기를 지원한다면 그 방식은 어려울 듯??
반응형'프로그래밍' 카테고리의 다른 글
트라이브스의 네트워킹 모델 (0) 2017.12.10 node.js에서 sqlite 사용 중 콜백으로 last insert id를 받아오지 못하는 경우 (0) 2017.08.29 are_same (0) 2014.11.21 람다 캡쳐에 move를 사용할 수 있어야 할 경우 (0) 2014.11.17 비쥬얼 스튜디오 2015(vs2015) 프리뷰 다운로드 링크 (0) 2014.11.13