相关疑难解决方法(0)

当boost :: asio :: io_service运行方法阻塞/解除阻塞时会感到困惑

作为Boost.Asio的初学者,我很困惑io_service::run().如果有人能在这个方法阻止/解除阻止时向我解释,我将不胜感激.文件指出:

run()函数将阻塞,直到所有工作完成,并且不再需要调度处理程序,或者直到io_service停止处理.

多个线程可以调用该run()函数来设置一个线程池,io_service可以从中执行处理程序.在池中等待的所有线程都是等效的,并且io_service可以选择其中任何一个来调用处理程序.

run()函数的正常退出意味着io_service对象已停止(stopped()函数返回true).后续调用run(),run_one(),poll()poll_one()将除非有预先调用立即返回reset().

以下陈述是什么意思?

[...]不再派遣处理人员[...]


在试图理解行为时io_service::run(),我遇到了这个例子(例3a).在其中,我观察到io_service->run()块和等待工单.

// WorkerThread invines io_service->run()
void WorkerThread(boost::shared_ptr<boost::asio::io_service> io_service);
void CalculateFib(size_t);

boost::shared_ptr<boost::asio::io_service> io_service(
    new boost::asio::io_service);
boost::shared_ptr<boost::asio::io_service::work> work(
   new boost::asio::io_service::work(*io_service));

// ...

boost::thread_group worker_threads;
for(int x = 0; x < 2; ++x)
{
  worker_threads.create_thread(boost::bind(&WorkerThread, io_service));
}

io_service->post( boost::bind(CalculateFib, 3));
io_service->post( boost::bind(CalculateFib, 4));
io_service->post( …
Run Code Online (Sandbox Code Playgroud)

c++ boost-asio

82
推荐指数
2
解决办法
4万
查看次数

什么是异步套接字?

什么是异步套接字?它们与普通套接字(阻塞和非阻塞)有什么不同?

该方向的任何指针或教程的任何链接都会有所帮助.

谢谢.

c sockets asynchronous

22
推荐指数
2
解决办法
2万
查看次数

提升asio同步与异步操作性能

这有点类似于boost :: asio异步性能.由于该问题没有确凿的答案,我发布了一个类似的问题,包含示例代码和统计信息以证明问题.

下面,我对同步和异步服务器应用程序进行了示例,它们在一个循环中连续向客户端发送25字节的消息.在客户端,我正在检查它能够以什么速率接收消息.样本设置非常简单.在同步服务器的情况下,它为每个客户端连接生成一个新线程,并且线程继续在循环中发送25字节的消息.在异步服务器的情况下,它每个客户端连接产生一个新线程,并且线程继续使用异步写入(主线程是调用的线程)在循环中发送25字节的消息ioservice.run().对于性能测试,我只使用一个客户端.

同步服务器代码:

#include <iostream>
#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <boost/asio.hpp>
#include <boost/thread.hpp>

using boost::asio::ip::tcp;

class tcp_connection : public boost::enable_shared_from_this<tcp_connection>
{
public:
    typedef boost::shared_ptr<tcp_connection> pointer;

    static pointer create(boost::asio::io_service& io_service)
    {
       return pointer(new tcp_connection(io_service));
    }

    tcp::socket& socket()
    {
        return socket_;
    }

    void start()
    {
        for (;;) {
            try {
                ssize_t len = boost::asio::write(socket_, boost::asio::buffer(message_));
                if (len != message_.length()) {
                    std::cerr<<"Unable to write all the bytes"<<std::endl;
                    break;
                }
                if (len == -1) {
                    std::cerr<<"Remote …
Run Code Online (Sandbox Code Playgroud)

c++ boost-asio

5
推荐指数
1
解决办法
2968
查看次数

Boost:Asio的游戏服务器如何异步工作?

我正在尝试创建一个游戏服务器,目前,我正在使用线程.每个对象(玩家,怪物)都有自己的线程与while(1)循环,执行特定的功能.

服务器基本上是这样的:

main(){

//some initialization

while(1)
{
//reads clients packet
//directs packet info to a particular object
//object performs some functions
//then server returns result packet back to client
Sleep(1);
}
Run Code Online (Sandbox Code Playgroud)

我听说使用这样的线程使服务器效率不高,我应该考虑使用Boost :: Asio,并使函数异步工作.但我不知道服务器如何工作.如果有人能解释这些服务器的工作原理,我将不胜感激.

multithreading boost boost-asio

4
推荐指数
1
解决办法
3652
查看次数

标签 统计

boost-asio ×3

c++ ×2

asynchronous ×1

boost ×1

c ×1

multithreading ×1

sockets ×1