当前位置: 技术问答>linux和unix
服务端内存问题
来源: 互联网 发布时间:2016-09-28
本文导语: 小程序是这样的, 客户端:连接服务端,连接成功后发送一个文件然后断开连接 服务端:循环体里等待客户端连接,accept返回后,用这个返回值创建线程接受客户端发来的文件。 我看到书上说在创建线程的函数中...
小程序是这样的,
客户端:连接服务端,连接成功后发送一个文件然后断开连接
服务端:循环体里等待客户端连接,accept返回后,用这个返回值创建线程接受客户端发来的文件。
我看到书上说在创建线程的函数中调用pthread_detach,在线程结束后会自动收回资源。
在Console工程中(全部用c语言):
使用了pthread_detach后,服务端只在第一次连接客户端时增加内存,之后客户端连接内存不增加。
将pthread_detach这一句屏蔽后再实验,每连接一次客户端,服务端的内存就会相应的增加一些。
这个结果符合书上的说明。
之后我将这个程序利用QT封装,QT仅用来作界面和创建一个线程来运行服务端的循环体(不然程序会死掉,毕竟单线程的话是顺序执行)其他代码均是原来的那个console工程的代码。在QT创建的线程里运行服务端等待客户端连接,并在这个QT线程中创建线程(调用了pthread_detach)接受文件。之后运行,但每次连接客户端后内存都要增加大约0.7M。正常的话应该和上面的程序一样内存不会有大的增加,请高手给分析分析,那里有可能出错。
今天先睡了,明天上论坛再看帖。
客户端:连接服务端,连接成功后发送一个文件然后断开连接
服务端:循环体里等待客户端连接,accept返回后,用这个返回值创建线程接受客户端发来的文件。
我看到书上说在创建线程的函数中调用pthread_detach,在线程结束后会自动收回资源。
在Console工程中(全部用c语言):
使用了pthread_detach后,服务端只在第一次连接客户端时增加内存,之后客户端连接内存不增加。
将pthread_detach这一句屏蔽后再实验,每连接一次客户端,服务端的内存就会相应的增加一些。
这个结果符合书上的说明。
之后我将这个程序利用QT封装,QT仅用来作界面和创建一个线程来运行服务端的循环体(不然程序会死掉,毕竟单线程的话是顺序执行)其他代码均是原来的那个console工程的代码。在QT创建的线程里运行服务端等待客户端连接,并在这个QT线程中创建线程(调用了pthread_detach)接受文件。之后运行,但每次连接客户端后内存都要增加大约0.7M。正常的话应该和上面的程序一样内存不会有大的增加,请高手给分析分析,那里有可能出错。
今天先睡了,明天上论坛再看帖。
|
你是用的QThread还是pthread_create?