프로그래밍

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



반응형