LinuxÖÐselectº¯Êýѧϰ¼°ÊµÀý±Ê¼Ç
UnixÖеĺ¯ÊýselectºÍpollÓÃÀ´£¬Ö§³ÖUnixÖÐI/O¸´ÓõŦÄÜ£¬ÔÚUnixÖÐI/OÄ£ÐÍ¿ÉÒÔ·ÖΪÒÔÒ»¼¸ÖÖ£º
£¨1£©×èÈûI/O
£¨2£©·Ç×èÈûI/O
£¨3£©I/O¸´Óã¨selectºÍpoll£©
£¨4£©ÐźÅÇý¶¯I/O(SIGIO)
£¨5£©Òì²½I/O
ÆäÖУ¬ÏÖÔڱȽÏÁ÷ÐеÄI/OÄ£ÐÍÊÇ×èÈûI/OÄ£ÐÍ.×èÈûI/OÊǵ±Ó¦ÓóÌÐòºÍÄں˽»»»Êý¾Ýʱ£¬ÓÉÓÚÄں˻¹Ã»ÓÐ×¼±¸ºÃÊý¾Ý£¬ÄÇôӦÓóÌÐò±ØÐë½øÐÐ×èÈû£¬²»ÄܼÌÐøÖ´ÐУ¬Ö±µ½Äں˵ÄÊý¾Ý×¼±¸ºÃ£¡Ó¦ÓóÌÐòÈ¡µ½Êý¾Ý·µ»Øºó£¬×èÈû¹ý³Ì½áÊø£¡µ«·µ»ØµÄ½á¹ûÒ²²¢²»Ò»¶¨ÊÇÕýÈ·µÄ£¡ÕâÀïÖ»ÊǾÙÒ»¸ö¼òµ¥µÄÀý×Ó£¡Ò²ÐíÇé¿ö»á¸ü¼ÓµÄ¸´ÔÓ£¡
·Ç×èÈûI/O£¬ÀýÈçÔÚºÍÄں˽»»»Êý¾Ýʱ£¬Èç¹ûÄں˵ÄÊý¾ÝûÓÐ×¼±¸ºÃ£¬ÄÇôӦÓóÌÐò²»»áÒ»ÕæµÈ´ý£¬»áÓÐÒ»¸ö·µ»ØÐÅÏ¢£¬ÒÔÅжÏÊÇÄÇÀï³öÁËÎÊÌ⣡ÕâÑùÓÐÖúÓÚÈ·ÈÏÊÇÔÚÄǸö½×¶Î³öÁËÎÊÌ⣡
I/O¸´Óã¬ÎÒÃǾͿÉÒÔµ÷ÓÃϵͳµ÷ÓÃselectºÍpoll£¡ÔÚÕâÁ½¸öϵͳµ÷ÓÃÖеÄijһ¸ö×èÈû£¬¶ø²»ÊÇÕæÕýµÄ×èÈûI/Oϵͳµ÷Óã¡
ÏÂÃæÖ÷Òª½éÉÜI/O¸´ÓÃÖеÄselectº¯Êý£¡selectº¯Êý¿ÉÒÔָʾÄں˵ȴý¶à¸öʼþÖеÄÈÎÒ»¸ö·¢Éú£¬½öÔÚÒ»¸ö»ò¶à¸öʼþ·¢Éú£¬»òÕߵȴýÒ»¸ö×ã¹»µÄʱ¼äºó²Å»½Ðѽø³Ì£¡selectº¯ÊýµÄÔÐÍÈçÏ£º
#include <sys/types.h>
#include<sys/time.h>
int select (int maxfdp1,fd_set *readset,fd_set * writeset,fd_set excpetset,const struct timeval *timeout);
·µ»ØÖµ£º×¼±¸ºÃµÄÃèÊö·ûµÄÕýÊýÄ¿ 0---³¬Ê± -1---³ö´í£¡
ÆäÖÐ×îºóÒ»¸ö²ÎÊýÊÇÒ»¸ö½á¹¹ÌåµÄÖ¸Õ룬Ëü±íʾµÈ´ýÄÚºËÖеÄÒ»×éÃèÊö·ûÈÎÒ»¸ö×¼±¸ºÃÐèÒª»¨·Ñ¶à¾ÃµÄʱ¼ä£¡ÆäÖÐtimevalÖ¸¶¨ÁËÃëÊýºÍ΢ÃëÊý¡£
struct timeval{
long tv_sec;//ÃëÊý
long tv_usec;//΢ÃëÊý
};
½« timeoutÉèÖÃΪ¿ÕÖ¸Õëʱ£¬»áÓÀÔ¶µÈ´ýÏÂÈ¥£¬µÈ´ý¹Ì¶¨µÄʱ¼ä£ºÈç¹ûtimeoutÖ¸ÏòµÄtimevalÖеľßÌåµÄֵʱ£¬»áµÈ´ýÒ»¸ö¹Ì¶¨µÄʱ¼ä£¬²»µÈ´ýÁ¢¿Ì·µ»Ø£¬ÕâʱtimevalÖеÄtv_secºÍtv_usecΪ0.
selectÓÐÈý¸ö¿ÉÄܵķµ»ØÖµ¡£
1£®Õý³£Çé¿öÏ·µ»Ø¾ÍÐ÷µÄÎļþÃèÊö·û¸öÊý£»
2£®¾¹ýÁËtimeoutʱ³¤ºóÈÔÎÞÉ豸׼±¸ºÃ£¬·µ»ØÖµÎª0£»
3£®Èç¹ûselect±»Ä³¸öÐźÅÖжϣ¬Ëü½«·µ»Ø-1²¢ÉèÖÃerrnoΪEINTR¡£
4£®Èç¹û³ö´í£¬·µ»Ø-1²¢ÉèÖÃÏàÓ¦µÄerrno¡£
EBADF ÎļþÃèÊö´ÊΪÎÞЧµÄ»ò¸ÃÎļþÒѹرÕ
EINTR ´Ëµ÷Óñ»ÐźÅË
Ïà¹ØÎĵµ£º
°üº¬3¸öÎļþ¼Ð£¬ºÍÒ»¸öÎļþMakefile
Ŀ¼×éÖ¯½á¹¹ÈçÏ£º
Makefile
inc/hello.h
main/main.c
src/hello.c
MakefileÎļþÔÚÍâÃæ£¬ÕâÑùÉú³ÉµÄ.oºÍ¿ÉÖ´ÐÐÎļþ¶¼ÔÚÍâÃæ£¬cleanÖ®ºó»áºÜ¸É¾»£¬½á¹¹ÇåÎú
ÎļþÄÚÈÝÈçÏ£º
Makefile(Ö®ËùÒÔÓôóд£¬ÒòΪmake¿ÉÒÔʶ±ðMakefileºÍmakefile£¬Óôóд¿ÉÒÔÏÊÃ÷һЩ)::
# String declar ......
ÔÚLINUX»·¾³¿ª·¢Çý¶¯³ÌÐò£¬Ê×ÏÈҪ̽²âµ½ÐÂÓ²¼þ£¬½ÓÏÂÀ´¾ÍÊÇ¿ª·¢Çý¶¯³ÌÐò¡£
³£ÓÃÃüÁîÕûÀíÈçÏ£º
ÓÃÓ²¼þ¼ì²â³ÌÐòkudzu̽²âÐÂÓ²¼þ£ºservice kudzu start ( or restart)
²é¿´CPUÐÅÏ¢£ºcat /proc/cpuinfo
²é¿´°å¿¨ÐÅÏ¢£ºcat /proc/pci
²é¿´PCIÐÅÏ¢£ºlspci (Ïà±Ècat /proc/pci¸üÖ±¹Û£©
²é¿´ÄÚ´æÐÅÏ¢ ......
£¨Ò»£©Îļþ¡¢Ä¿Â¼²Ù×÷ÃüÁî
1¡¢lsÃüÁî
¹¦ÄÜ£ºÏÔʾÎļþºÍĿ¼µÄÐÅÏ¢
ls¡¡ÒÔĬÈÏ·½Ê½ÏÔʾµ±Ç°Ä¿Â¼ÎļþÁбí
ls -a ÏÔʾËùÓÐÎļþ°üÀ¨Òþ²ØÎļþ
ls -l ÏÔʾÎļþÊôÐÔ£¬°üÀ¨´óС£¬ÈÕÆÚ£¬·ûºÅÁ¬½Ó£¬ÊÇ·ñ¿É¶Áд¼°ÊÇ·ñ¿ÉÖ´ÐÐ
ls -lh ÏÔʾÎļþµÄ´óС£¬ÒÔÈÝÒ×Àí½âµÄ¸ñʽӡ³öÎļþ´óС (ÀýÈç 1K 234M 2G)
ls -lt ÏÔʾÎļþ£¬°´ÕÕÐÞ¸ÄÊ ......
1. Workqueue
WorkqueueµÄÃû×־ͺÍËûµÄ¹¦ÄÜÒ»Ñù£ºÐèÒª´¦ÀíµÄ¹¤×÷ÁбíºÍ¹¤×÷µÄÌí¼Óɾ³ý£¨Ã²ËÆÃ»Óп´µ½ÈçºÎɾ³ýµÄ£©¡¢ÒÔ¼°¹¤×÷µÄµ÷¶ÈÖ´ÐС£
ÐèÒª´¦ÀíµÄ¹¤×÷Áбíͨ³£¶¼Î¬»¤ÔÚÄں˶ÔÏóworkqueue_structÀïÃæ¡£ÏµÍ³ÀïÃæ¿ÉÒÔÓжà¸öworkqueue_struct¡£ ......
ºÜ¾ÃûÓÐд¼¼Êõ²©ÎÄÁË£¬´ÓÕâÀ↑ʼÎÒµÄÑо¿ÉúÉúÑÄ£¬×ªÑÛ¾ÍÒªÔÚÖ°³¡ÉÏÑø¼Òºý¿Ú£¬Éú»îÕæµÄ²»ÈÝÒ×£¬ÐҺû¹Óм¼ÊõÏà°éΪÎé¡£
ÓÉÓÚ¹¤×÷µÄ¹ØÏµ£¬ÖÕÓÚ½Ó´¥µ½linuxÍøÂçºÍkernelµÄ±à³Ì£¬×ÜÌåÀ´Ëµ×ÜÊÇÒ»¸öºÃµÄÆõ»ú¡£ÈÃÎÒÄܹ»ÉîÈë²Ù×÷ϵͳÄںˡ£×ö¹ýÒ»¶Îʱ¼äµÄÓû§³ÌÐòµÄ¿ª·¢£¬×ÜÊÇÔÚWindowsƽ̨ÉÏ£¬ÖÕÓÚÓлú»áÔÚlinuxÉÏ×öµã¶«Î÷£¬»¹Ê ......