分离式 POSIX 线程与可连接 POSIX 线程

2024-10-25 08:42:00
admin
原创
211
摘要:问题描述:我一直在使用pthreadC 语言中的库来创建和连接线程。我应该什么时候从一开始就创建一个分离线程?与可连接线程相比,它是否具有任何性能优势?在可连接 (默认情况下) 线程上不执行 是否合法pthread_join()?或者这样的线程是否应始终在 ingdetach()之前使用该函数pthread_...

问题描述:

我一直在使用pthreadC 语言中的库来创建和连接线程。

  1. 我应该什么时候从一开始就创建一个分离线程?与可连接线程相比,它是否具有任何性能优势?

  2. 在可连接 (默认情况下) 线程上不执行 是否合法pthread_join()?或者这样的线程是否应始终在 ingdetach()之前使用该函数pthread_exit()


解决方案 1:

  1. 当您知道不想等待时,请创建一个分离线程pthread_join()。唯一的性能优势是,当分离线程终止时,可以立即释放其资源,而不必等待线程连接后才能释放资源。

  2. 不加入可加入的线程是“合法的”;但通常不建议这样做,因为(如前所述)在线程加入之前不会释放资源,因此如果不加入线程,资源将无限期地保持绑定状态(直到程序退出)。

解决方案 2:

我应该什么时候从一开始就创建一个分离的线程?

每当应用程序不关心该线程何时完成并且不关心其线程的返回值时(线程可以通过将值传回给其他线程/应用程序pthread_exit)。

例如,在客户端-服务器应用程序模型中,服务器可能会创建一个新线程来处理每个请求。但服务器本身并不关心线程的返回值。在这种情况下,创建分离线程是有意义的。

服务器唯一需要确保的是当前处理的请求已完成。它只需退出主线程即可完成此操作,而无需退出整个程序/应用程序。当进程中的最后一个线程退出时,应用程序/程序将自然退出。

伪代码可能看起来像:

/* A server application */

void process(void *arg)
{
    /* Detach self. */
    pthread_detach(pthread_self());
    
    /* process a client request. */
    
    pthread_exit(NULL);
}

int main(void)
{

    while (not_done) {
        pthread_t t_id;
        errno = pthread_create(&t_id, NULL, process, NULL);
        if (errno) perror("pthread_create:");
    }

    /* There may be pending requests at this point. */
    
    /* Just exit the main thread - not the whole program - so that remaining
       requests that may still be processed can continue. */
    pthread_exit(NULL);
}

另一个示例可能是守护进程或记录器线程,它在应用程序运行时定期记录一些信息。

与可连接线程相比,它是否具有任何性能优势?

从性能角度来看,可连接线程与分离线程之间没有区别。唯一的区别在于,对于分离线程,其资源(例如线程堆栈和任何关联的堆内存等 - 这些“资源”的确切构成是特定于实现的)。

不在可连接(默认)线程上执行 pthread_join() 是否合法?

是的,不与线程连接是合法的。pthread_join这只是一个便利函数,除非你需要,否则绝对不需要使用。但请注意,默认情况下创建的线程是可连接线程。

您可能想要加入的一个示例是当线程执行在它们之间分配的“部分”工作时。在这种情况下,您需要在继续之前检查所有线程是否完成。任务场并行就是一个很好的例子。

或者这样的线程在 pthread_exit() 之前是否应始终使用 detach() 函数?

没必要。但是您经常需要在创建时决定是需要可连接线程还是分离线程。


PTHREAD_CREATE_DETACHED请注意,虽然可以通过调用 设置属性来创建可分离线程pthread_attr_setdetachstate,但线程决定可以决定在任何时间点分离自身,例如使用pthread_detach(pthread_self())。此外,具有另一个线程的线程 id ( ) 的线程pthread_t可以使用 分离pthread_detach(thread_id);

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2599  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1556  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。其中,技术评审与决策评审是IPD流程中至关重要的环节,它们既有明显的区别,又存在紧密的协同关系。深入理解这两者的区别与协同,对于企业有效实施IPD流程,提升产品开发效率与质量具有重要意义...
IPD管理流程   38  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、ClickUp、Freshdesk、GanttPRO、Planview、Smartsheet、Asana、Nifty、HubPlanner、Teamwork。在当今快速变化的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的关键工具。然而...
项目管理系统   32  
  建设工程项目质量关乎社会公众的生命财产安全,也影响着企业的声誉和可持续发展。高质量的建设工程不仅能为使用者提供舒适、安全的环境,还能提升城市形象,推动经济的健康发展。在实际的项目操作中,诸多因素会对工程质量产生影响,从规划设计到施工建设,再到后期的验收维护,每一个环节都至关重要。因此,探寻并运用有效的方法来提升建设工程...
工程项目管理制度   28  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用