모든 클라이언트 연결에 "AnyEvent timer"감시자 객체를 생성하는 서버가 있습니다 (AnyEvent 루프에 추가).Perl AnyEvent 동시성 내부
use AnyEvent;
...
my $db_handle = myschema->connect();
my $w; $w = AnyEvent->timer (
interval => $interval,
after => $interval,
cb => sub {
## Remove from loop on some condition
unless ($ret = _check_session($sid)) {
undef $w;
}
## Execute main logic
$db_handle->lookup($sid);
}
);
...
따라서 콜백은 $ interval 초마다 실행됩니다. 많은 클라이언트가있는 경우, 일부 콜백이 동시에 실행되어야합니다. AnyEvent는 어떻게 처리합니까? 이러한 콜백을 차례로 실행합니까? 아니면이 경우에 동시성 메커니즘이 있습니까? 이렇게 콜백이 동시에 실행됩니다. (예를 들어, 여러 스레드를 생성하여 동시에 실행해야하는 여러 콜백의 실행 속도를 높이려면)
내 서버의 경우 콜백은 데이터베이스 조회를 수행합니다. 데이터베이스 연결에 대한 데이터베이스 핸들이 이벤트 루프 외부에서 초기화되었습니다. 내 관심사는 AnyEvent에 동시성 메커니즘이있는 경우 하나의 콜백은 다른 하나가 데이터베이스 룩업을 마칠 때까지 기다려야하고 데이터베이스 핸들이 자유 롭기 때문에 콜백을 동시에 실행할 수 없다는 것이다.
P. 대답은 '이케 가미'덕분입니다.
질문에 대한 답변이 있으면 질문에 감사를 표시하는 대신 답변에 표시 옆에있는 체크 표시를 선택하십시오. StackOverflow에 오신 것을 환영합니다! – ikegami
귀하의 참여에 감사드립니다. 대답은 IMHO에 응답되지 않습니다. 질문에서 제기 된 문제에 대해 더 구체적으로 설명 할 수 있습니다. 그리고 누군가가 당신에게 감사 할 때 (특히 첫 반응이 코멘트가 아닌 답을 쓰는 것이었을 때, 즉 당신 자신을 먼저 가르쳐 준 후에) 이렇게 논평하는 것이 예의라고 생각합니다. –
아, 업데이트의 일부를 알지 못했습니다. – ikegami