Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 对于多线程应用程序中使用的一段代码,从O(n^2)复杂度更改为O(n)复杂度或更低_Multithreading_Algorithm - Fatal编程技术网

Multithreading 对于多线程应用程序中使用的一段代码,从O(n^2)复杂度更改为O(n)复杂度或更低

Multithreading 对于多线程应用程序中使用的一段代码,从O(n^2)复杂度更改为O(n)复杂度或更低,multithreading,algorithm,Multithreading,Algorithm,我有一段代码如下。我想为此提高时间复杂度。 这是一个线程,我最多可以有2000个线程同时执行这个函数 最重要的是,我等待从轮询集中准备好的文件描述符。MAX_RTP_会话也非常庞大(价值5000或更多)。所以这是一个很大的for循环,因此我可以看到性能受到影响。[当MAX_RTP_会话的值降低到仅500时,我可以看到性能的巨大改进] 但我必须使用2000个线程和5000个会话。我希望我能找到一种方法将时间复杂度从o(n^2)更改为至少o(n)或更好。任何想法都非常感谢 //.. retval=e

我有一段代码如下。我想为此提高时间复杂度。 这是一个线程,我最多可以有2000个线程同时执行这个函数

最重要的是,我等待从轮询集中准备好的文件描述符。MAX_RTP_会话也非常庞大(价值5000或更多)。所以这是一个很大的for循环,因此我可以看到性能受到影响。[当MAX_RTP_会话的值降低到仅500时,我可以看到性能的巨大改进]

但我必须使用2000个线程和5000个会话。我希望我能找到一种方法将时间复杂度从o(n^2)更改为至少o(n)或更好。任何想法都非常感谢

//..
retval=epoll_wait(epfd, pollset, EPOLL_MAX_EVENTS, mSecTimeout)
//..

sem_wait(&sem_sessions);

for(i = 0; i< retVal; i++) {  
    for (j=0; j < MAX_RTP_SESSIONS; j++) {
        if ((g_rtp_sessions[j].destroy==FALSE) &&
        (g_rtp_sessions[j].used!=FALSE) &&
        (g_rtp_sessions[j].p_rtp->rtp_socket->fd == pollset[i].data.fd))
        {
            if (0 < rtp_recv_data(....)) {
                rtp_update(...)
            }
        }
    }
}

sem_post(&sem_sessions);

//..
/。。
retval=epoll\u wait(epfd、pollset、epoll\u MAX\u事件、mSecTimeout)
//..
sem_等待(和sem_会话);
对于(i=0;irtp_socket->fd==pollset[i].data.fd)
{
如果(0
Sort
pollset
,然后您可以对其进行二进制搜索,这将导致一个O(n logn)算法。

嗨,塞巴斯蒂安,谢谢您的回复。我可以对g_rtp_会话进行排序和二进制搜索,而不是对pollset进行排序,对吗?由于retVal返回的值仅小于100,而MAX_RTP_会话可以是5000甚至10000。