프로그래밍
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을 이용할 수 있으나 유동적 크기를 지원한다면 그 방식은 어려울 듯??
반응형