2011-12-15 2 views
13

"UI 개발자"(우리)와 "C++ 개발자"(그들)로 구성된 데스크톱 응용 프로그램 팀에서 일합니다. C++ 개발자는 우리가 UI에 표시하는 모든 데이터를 가져와 IO, 데이터베이스 액세스, 웹 호출 등을 수행 할 책임이 있습니다.C++ 용 비 스레드 비동기 입출력에 대한 소개?

최근 IO 차단과 관련하여 심각한 성능 문제가 발생했습니다 UI 스레드 물론 이것에 대한 해결책은 IO를 비동기로 만드는 것입니다. 그러나 C++ 개발자들은 이것이 새로운 쓰레드를 생성하는 것만으로 가능하다고 주장합니다. 이것은 매우 비싸다는 것을 알고 있습니다.

Node.js 등에서 async IO가 스레드를 포함 할 필요가 없다는 것을 알고 있습니다. 나는 Win32와 아마 맥이 이벤트 루프를 가지고 있다는 것을 안다. 그러나 비동기 비 스레드 IO를 수행하는 C++ 토양에서 어떤 솔루션이 널리 사용되는지 전혀 알지 못합니다. (어쩌면 libuv 노드 밑에있는 것일까?).

누구나 인기있는 라이브러리 또는 더 나은 튜토리얼 기사를 가리킬 수 있습니까? 그렇다면이 개념을 C++ 개발자에게 소개 할 수 있습니까? 크로스 플랫폼 (PC 및 Mac)에 대한 보너스 포인트. 비동기 비 스레드 데이터베이스 솔루션이있는 경우 보너스 포인트가 더 많이 있습니다. SQLite를 사용하는 것이 많은 문제의 원인이라고 생각하기 때문에.

+4

"새 스레드를 _ 생성합니다. 우리는 매우 비쌉니다." 나는이 의견을 많이 본다. 그리고 저는 그것이 "매우 비쌉니다"라는 것을 모릅니다. 특정 유스 케이스에 크게 의존하며 추가 스레드를 "피해야하는"경우는이를 수용해야하는 일반적인 경우보다 훨씬 적습니다. – Chad

+0

Google 어플은 사용자의 전자 서적 라이브러리에있는 모든 파일의 속성을 읽어야합니다. 일부 경우 1500 파일 이상일 수 있습니다. 1500 스레드는 허용되지 않습니다. – Domenic

+4

그러나 한 스레드에서이 작업을 수행 할 수 있습니다. 1500 항목은 매우 작은 작업 대기열입니다. – Chad

답변

11

Boost Asynchronous I/O (asio). 그들은 excellent tutorial과 몇 가지 examples 있습니다. 그것은 크로스 플랫폼입니다.

+1

나는 그것을 읽지 못했다. 스레드를 사용합니까? – Domenic

+1

그럴 필요는 없습니다. WM_TIMER 메시지를 사용하고'boost :: asio :: io_service :: poll_one()'을 사용하여 비동기 태스크 스케줄러를 실행할 수 있습니다. – Chad

+1

http://www.boost.org/doc/libs/1_48_0/doc/html/boost_asio/overview/core/threads.html –