我注意到下面的代碼啓動了2個線程(Windows 8.1,MSVC 2013)。在等待acceptor.accept()
約10秒後,它會產生2個額外的線程。如果進程閒置幾分鐘,則會減少到三分鐘。Boost.Asio SSL mystic threads
#include <boost/asio.hpp>
#include <boost/asio/ssl.hpp>
using namespace boost::asio;
int main(int argc, char** argv)
{
int test;
ssl::context ctx(ssl::context::tlsv12_server);
/* ctx settings */
io_service io_service;
ssl::stream<ip::tcp::socket> socket(io_service, ctx);
ip::tcp::acceptor acceptor(io_service, ip::tcp::endpoint(ip::tcp::v4(), 4433), false);
acceptor.accept(socket.lowest_layer());
socket.handshake(ssl::stream_base::server);
read(socket, buffer(&test, sizeof(test)));
boost::system::error_code error;
socket.shutdown(error);
if (error && error != boost::asio::error::eof) throw boost::system::system_error(error);
socket.lowest_layer().shutdown(ip::tcp::socket::shutdown_both);
socket.lowest_layer().close();
}
這種行爲對我來說有點奇怪,我甚至不使用單獨的異步操作,線程或其他東西。
我做了一些測試,看來問題只發生在我使用SSL套接字時。 這兩個例子(阻塞和非阻塞)也只啓動一個線程。
我也試過this 「官方」 異步SSL的例子,但它產生了同樣的問題。
什麼原因導致此問題?我能消除這種行爲嗎?
謝謝,你是絕對正確的! https://i.imgur.com/VecbGVV.png – Anno
@Anno Woot!該截圖說明了數量,我將其添加到答案中。 – sehe