2013-10-09 2 views
0

select()는 파일 설명 자 (FD)의 최대 수 (num)의 크기를 가진 배열을 거쳐야하기 때문에 확장 성이 없다고합니다 : complexity O (max_num_FD). 그리고 poll()은 액티브 FD()의 num 크기의 배열을 통해서만 수행되기 때문에 더 낫다고합니다 : 복잡성 O (활성 FD 수) 활성 FD는 무엇을 의미합니까?poll()이 select()보다 나은 이유는 무엇입니까?

poll()은 한 번에 사용 가능한 많은 데이터가있는 대규모 서버에서 널리 사용되는 방법입니까? 일반적으로 어떤 소켓 접근 방식을 사용하면 일반적으로 대규모 서버가 실제로 사용됩니까?

+0

이 언어는 특정 언어입니까? –

+0

@Edgar 원시 유닉스 시스템 호출을 사용하는 원시 C입니다. – SzG

+1

@SzG 아니요, Unix 시스템 호출을 사용하는 언어입니다. 'select'와'poll'은 여러 언어로 직접 사용할 수 있습니다. 언어는 중요하지 않습니다. 매직 퍼포먼스 소스와 "활성 fd"의 정의는 언어가 아닌 커널에 있습니다. – delnan

답변

1

활성 FD는 열린 파일 설명자를 의미합니다.

select()와 poll()은 단일 스레드 단일 프로세스 프로그램이 동시에 여러 연결을 처리 할 수 ​​있도록하기위한 것입니다. 예를 들어 OpenWRT의 uhttpd 웹 서버는 이와 같습니다.

select() 및 poll()은 모든 Unix에서 사용할 수 있습니다. 더 나은 스케일링 O (1) 버전은 리눅스에서는 epoll이고 BSD에서는 kqueue입니다. 더 적은 휴대용. 하지만 libkqueue0을 데비안 리눅스에 설치할 수 있습니다.

많은 프로그램이 다른 접근 방식을 사용합니다. 예를 들어 SSH 데몬 인 sshd는 각 연결에 대해 하위 프로세스를 생성합니다. 다른 사람들은 스레드의 각 연결을 처리합니다.

+0

대규모 서버에 ssh를 사용 하시겠습니까? ssh http 연결을 좋아하십니까? – user389955

+0

아니요. 몇 가지 잘 알려진 서비스가 어떻게 작동하는지 예를 들었습니다. – SzG

+0

답변 해 주셔서 감사합니다. u는 put_getn을 들었나요? 나도 확장 성이 있다고 들었어. epoll()과 kqueue와 비교하면 어떨까? – user389955

관련 문제