ʲôʱºòÐèÒª´´½¨Ï̳߳ØÄØ£¿¼òµ¥µÄ˵£¬Èç¹ûÒ»¸öÓ¦ÓÃÐèҪƵ·±µÄ´´½¨ºÍÏú»ÙỊ̈߳¬¶øÈÎÎñÖ´ÐеÄʱ¼äÓַdz£¶Ì£¬ÕâÑùÏ̴߳´½¨ºÍÏú»ÙµÄ´øÀ´µÄ¿ªÏú¾Í²»ÈݺöÊÓ£¬ÕâʱҲÊÇÏ̳߳ظóö³¡µÄ»ú»áÁË¡£Èç¹ûÏ̴߳´½¨ºÍÏú»Ùʱ¼äÏà±ÈÈÎÎñÖ´ÐÐʱ¼ä¿ÉÒÔºöÂÔ²»¼Æ£¬ÔòûÓбØÒªÊ¹ÓÃÏ̳߳ØÁË¡£
ÏÂÃæÊÇLinuxϵͳÏÂÓÃCÓïÑÔ´´½¨µÄÒ»¸öÏ̳߳ء£Ï̳߳ػáά»¤Ò»¸öÈÎÎñÁ´±í(ÿ¸öCThread_worker½á¹¹¾ÍÊÇÒ»¸öÈÎÎñ)¡£
pool_init()º¯ÊýÔ¤ÏÈ´´½¨ºÃmax_thread_num¸öỊ̈߳¬Ã¿¸öÏß³ÌÖ´thread_routine ()º¯Êý¡£¸Ãº¯ÊýÖÐ
1. while (pool->cur_queue_size == 0)
2. {
3. pthread_cond_wait (&(pool->queue_ready),&(pool->queue_lock));
4. }
±íʾÈç¹ûÈÎÎñÁ´±íÖÐûÓÐÈÎÎñ£¬Ôò¸ÃÏ̳߳öÓÚ×èÈûµÈ´ý״̬¡£·ñÔò´Ó¶ÓÁÐÖÐÈ¡³öÈÎÎñ²¢Ö´ÐС£
pool_add_worker()º¯ÊýÏòÏ̳߳صÄÈÎÎñÁ´±íÖмÓÈëÒ»¸öÈÎÎñ£¬¼ÓÈëºóͨ¹ýµ÷ÓÃpthread_cond_signal (&(pool->queue_ready))»½ÐÑÒ»¸ö³öÓÚ×èÈû״̬µÄÏß³Ì(Èç¹ûÓеϰ)¡£
pool_destroy ()º¯ÊýÓÃÓÚÏú»ÙÏ̳߳أ¬Ï̳߳ØÈÎÎñÁ´±íÖеÄÈÎÎñ²»»áÔÙ±»Ö´ÐУ¬µ«ÊÇÕýÔÚÔËÐеÄÏ̻߳áÒ»Ö±°ÑÈÎÎñÔËÐÐÍêºóÔÙÍ˳ö¡£
ÏÂÃæÌù³öÍêÕû´úÂë
1. #include
2. #include
3 ......
ʲôʱºòÐèÒª´´½¨Ï̳߳ØÄØ£¿¼òµ¥µÄ˵£¬Èç¹ûÒ»¸öÓ¦ÓÃÐèҪƵ·±µÄ´´½¨ºÍÏú»ÙỊ̈߳¬¶øÈÎÎñÖ´ÐеÄʱ¼äÓַdz£¶Ì£¬ÕâÑùÏ̴߳´½¨ºÍÏú»ÙµÄ´øÀ´µÄ¿ªÏú¾Í²»ÈݺöÊÓ£¬ÕâʱҲÊÇÏ̳߳ظóö³¡µÄ»ú»áÁË¡£Èç¹ûÏ̴߳´½¨ºÍÏú»Ùʱ¼äÏà±ÈÈÎÎñÖ´ÐÐʱ¼ä¿ÉÒÔºöÂÔ²»¼Æ£¬ÔòûÓбØÒªÊ¹ÓÃÏ̳߳ØÁË¡£
ÏÂÃæÊÇLinuxϵͳÏÂÓÃCÓïÑÔ´´½¨µÄÒ»¸öÏ̳߳ء£Ï̳߳ػáά»¤Ò»¸öÈÎÎñÁ´±í(ÿ¸öCThread_worker½á¹¹¾ÍÊÇÒ»¸öÈÎÎñ)¡£
pool_init()º¯ÊýÔ¤ÏÈ´´½¨ºÃmax_thread_num¸öỊ̈߳¬Ã¿¸öÏß³ÌÖ´thread_routine ()º¯Êý¡£¸Ãº¯ÊýÖÐ
1. while (pool->cur_queue_size == 0)
2. {
3. pthread_cond_wait (&(pool->queue_ready),&(pool->queue_lock));
4. }
±íʾÈç¹ûÈÎÎñÁ´±íÖÐûÓÐÈÎÎñ£¬Ôò¸ÃÏ̳߳öÓÚ×èÈûµÈ´ý״̬¡£·ñÔò´Ó¶ÓÁÐÖÐÈ¡³öÈÎÎñ²¢Ö´ÐС£
pool_add_worker()º¯ÊýÏòÏ̳߳صÄÈÎÎñÁ´±íÖмÓÈëÒ»¸öÈÎÎñ£¬¼ÓÈëºóͨ¹ýµ÷ÓÃpthread_cond_signal (&(pool->queue_ready))»½ÐÑÒ»¸ö³öÓÚ×èÈû״̬µÄÏß³Ì(Èç¹ûÓеϰ)¡£
pool_destroy ()º¯ÊýÓÃÓÚÏú»ÙÏ̳߳أ¬Ï̳߳ØÈÎÎñÁ´±íÖеÄÈÎÎñ²»»áÔÙ±»Ö´ÐУ¬µ«ÊÇÕýÔÚÔËÐеÄÏ̻߳áÒ»Ö±°ÑÈÎÎñÔËÐÐÍêºóÔÙÍ˳ö¡£
ÏÂÃæÌù³öÍêÕû´úÂë
1. #include
2. #include
3 ......
C/C++ optimizing compilers are great--but there *are* a few techniques for hand-tuning your code to run as efficiently as possible on the AMD Athlon64 and Opteron processors, especially when developing DLLs, device drivers, or other performance-bound pieces of code.
Alan Zeichick
Share |
6/21/2004
Sidebar: Know the Code
A code profiler can help determine which parts of your application should be optimized. You should always use a profiler both before and after optimization to see if your change actually made an improvement—with C/C++, you can never be sure if your hand-tuning methods are better than those of your optimizing compiler!
The smart engineers at AMD have spent a lot of time identifying places where C/C++ developers can optimize code for best performance. Some of these optimizations might look familiar—they're generally great coding practice for any 32-bit or 64-bit platform or operating system. In fact, most of these suggestions ......
C/C++ optimizing compilers are great--but there *are* a few techniques for hand-tuning your code to run as efficiently as possible on the AMD Athlon64 and Opteron processors, especially when developing DLLs, device drivers, or other performance-bound pieces of code.
Alan Zeichick
Share |
6/21/2004
Sidebar: Know the Code
A code profiler can help determine which parts of your application should be optimized. You should always use a profiler both before and after optimization to see if your change actually made an improvement—with C/C++, you can never be sure if your hand-tuning methods are better than those of your optimizing compiler!
The smart engineers at AMD have spent a lot of time identifying places where C/C++ developers can optimize code for best performance. Some of these optimizations might look familiar—they're generally great coding practice for any 32-bit or 64-bit platform or operating system. In fact, most of these suggestions ......
1.ÒýÑÔ
C++ÓïÑԵĴ´½¨³õÖÔÊÇ“a better
C”£¬µ«ÊÇÕâ²¢²»Òâζ×ÅC++ÖÐÀàËÆCÓïÑÔµÄÈ«¾Ö±äÁ¿ºÍº¯ÊýËù²ÉÓõıàÒëºÍÁ¬½Ó·½Ê½ÓëCÓïÑÔÍêÈ«Ïàͬ¡£×÷ΪһÖÖÓûÓëC¼æÈݵÄÓïÑÔ£¬C++±£ÁôÁËÒ»²¿·Ö¹ý³Ì
ʽÓïÑÔµÄÌØµã£¨±»ÊÀÈ˳ÆÎª“²»³¹µ×µØÃæÏò¶ÔÏ󔣩£¬Òò¶øËü¿ÉÒÔ¶¨Òå²»ÊôÓÚÈκÎÀàµÄÈ«¾Ö±äÁ¿ºÍº¯Êý¡£µ«ÊÇ£¬C++±Ï¾¹ÊÇÒ»ÖÖÃæÏò¶ÔÏóµÄ³ÌÐòÉè¼ÆÓïÑÔ£¬ÎªÁËÖ§
³Öº¯ÊýµÄÖØÔØ£¬C++¶ÔÈ«¾Öº¯ÊýµÄ´¦Àí·½Ê½ÓëCÓÐÃ÷ÏԵIJ»Í¬¡£
2.´Ó±ê׼ͷÎļþ˵Æð
ijÆóÒµÔø¾¸ø³öÈçϵÄÒ»µÀÃæÊÔÌ⣺
ÃæÊÔÌâ
Ϊʲô±ê׼ͷÎļþ¶¼ÓÐÀàËÆÒÔϵĽṹ£¿
#ifndef __INCvxWorksh
#define __INCvxWorksh
#ifdef __cplusplus
extern "C" {
#endif
/*...*/
#ifdef __cplusplus
}
#endif
#endif /* __INCvxWorksh */
·ÖÎö
ÏÔÈ»£¬Í·ÎļþÖеıàÒëºê“#ifndef __INCvxWorksh¡¢#define __INCvxWorksh¡¢#endif” ......
Ò»¡¢C/SģʽÓëB/SģʽµÄ±È½Ï·ÖÎö
¡¡¡¡C/SģʽÖ÷ÒªÓɿͻ§Ó¦ÓóÌÐò(Client)¡¢·þÎñÆ÷¹ÜÀí³ÌÐò(Server)ºÍÖмä¼þ(middleware)Èý¸ö²¿¼þ×é³É¡£¿Í»§Ó¦ÓóÌÐòÊÇϵͳÖÐÓû§ÓëÊý¾Ý½øÐн»»¥µÄ²¿¼þ¡£·þÎñÆ÷³ÌÐò¸ºÔðÓÐЧµØ¹ÜÀíϵͳ×ÊÔ´£¬Èç¹ÜÀíÒ»¸öÐÅÏ¢Êý¾Ý¿â£¬ÆäÖ÷Òª¹¤×÷Êǵ±¶à¸ö¿Í»§²¢·¢µØÇëÇó·þÎñÆ÷ÉϵÄÏàͬ×ÊԴʱ£¬¶ÔÕâЩ×ÊÔ´½øÐÐ×îÓÅ»¯¹ÜÀí¡£Öмä¼þ¸ºÔðÁª½á¿Í»§Ó¦ÓóÌÐòÓë·þÎñÆ÷¹ÜÀí³ÌÐò£¬ÐͬÍê³ÉÒ»¸ö×÷Òµ£¬ÒÔÂú×ãÓû§²éѯ¹ÜÀíÊý¾ÝµÄÒªÇó¡£
¡¡¡¡B/SģʽÊÇÒ»ÖÖÒÔWeb¼¼ÊõΪ»ù´¡µÄÐÂÐ͵ÄMISϵͳƽ̨ģʽ¡£°Ñ´«Í³C/SģʽÖеķþÎñÆ÷²¿·Ö·Ö½âΪһ¸öÊý¾Ý·þÎñÆ÷ÓëÒ»¸ö»ò¶à¸öÓ¦Ó÷þÎñÆ÷(Web·þÎñÆ÷)£¬´Ó¶ø¹¹³ÉÒ»¸öÈý²ã½á¹¹µÄ¿Í»§·þÎñÆ÷Ìåϵ¡£
¡¡¡¡µÚÒ»²ã¿Í»§»úÊÇÓû§ÓëÕû¸öϵͳµÄ½Ó¿Ú¡£¿Í»§µÄÓ¦ÓóÌÐò¾«¼òµ½Ò»¸öͨÓõÄä¯ÀÀÆ÷Èí¼þ£¬ÈçNetscape Navigator£¬Î¢Èí¹«Ë¾µÄIEµÈ¡£ä¯ÀÀÆ÷½«HTML´úÂëת»¯³ÉͼÎIJ¢Ã¯µÄÍøÒ³¡£ÍøÒ³»¹¾ß±¸Ò»¶¨µÄ½»»¥¹¦ÄÜ£¬ÔÊÐíÓû§ÔÚÍøÒ³ÌṩµÄÉêÇë±íÉÏÊäÈëÐÅÏ¢Ìá½»¸øºǫ́£¬²¢Ìá³ö´¦ÀíÇëÇó¡£Õâ¸öºǫ́¾ÍÊǵڶþ²ãµÄWeb·þÎñÆ÷¡£
¡¡¡¡µÚ¶þ²ãWeb·þÎñÆ÷½«Æô¶¯ÏàÓ¦µÄ½ø³ÌÀ´ÏìÓ¦ÕâÒ»ÇëÇ󣬲¢¶¯Ì¬Éú³ÉÒ»´®HTML´úÂ룬ÆäÖÐǶÈë´¦ÀíµÄ½á¹û£¬·µ»Ø¸ø¿Í»§»úµÄä¯ÀÀÆ÷¡£Èç¹û¿Í»§»úÌ ......
´óѧÒѾÀ´µ½ÁË×îÖØÒªµÄʱÆÚÁË£¬ÎÒ²»ÄÜÔÙÒ»ÊÂÎÞ³ÉÁË¡£¹â˵ûÓã¬ËùÒÔ¾ÍÔÚÕâÀïдÏÂÎÄÕ£¬ÒԼǼÎҵijɳ¤Àú³Ì¡£
ÕâѧÆÚ¸ÕºÃѧµ½Êý¾Ý½á¹¹£¬ÄǾͽ«ÌâÄ¿·ÖÎöµÄ¹ý³Ì¼°´úÂëдÏÂÀ´£¬¹©ÒÔºó×Ô¼ºÈ¡Éá¡£Òò±¾ÈËˮƽһ°ã£¬ËùÒÔ´úÂë²¢²»Ò»¶¨ÊÇ×îÓŵ쬵«ÊÇÎÒ»áŬÁ¦¸Ä½ø£¬×ö×îºÃµÄ×Ô¼º£¡ ......
C/C++º¯Êýµ÷ÓÃÔ¼¶¨ºÍº¯ÊýÃû³ÆÐÞÊιæÔò̽ÌÖ
×÷ÕߣºÐǹ죨oRbIt£©
ʹÓÃC/C++ÓïÑÔ¿ª·¢Èí¼þµÄ³ÌÐòÔ±¾³£Åöµ½ÕâÑùµÄÎÊÌ⣺ÓÐʱºòÊdzÌÐò±àÒëûÓÐÎÊÌ⣬µ«ÊÇÁ´½ÓµÄʱºò×ÜÊDZ¨¸æº¯Êý²»´æÔÚ£¨¾µäµÄLNK
2001´íÎ󣩣¬ÓÐʱºòÊdzÌÐò±àÒëºÍÁ´½Ó¶¼Ã»ÓдíÎ󣬵«ÊÇÖ»Òªµ÷ÓÿâÖеĺ¯Êý¾Í»á³öÏÖ¶ÑÕ»Òì³£¡£ÕâЩÏÖÏóͨ³£ÊdzöÏÖÔÚCºÍC++µÄ´úÂë»ìºÏʹÓõÄÇé¿öÏ»ò
ÔÚC++³ÌÐòÖÐʹÓõÚÈý·½µÄ¿âµÄÇé¿öÏ£¨²»ÊÇÓÃC++ÓïÑÔ¿ª·¢µÄ£©£¬ÆäʵÕâ¶¼ÊǺ¯Êýµ÷ÓÃÔ¼¶¨£¨Calling
Convention£©ºÍº¯ÊýÃûÐÞÊΣ¨Decorated
Name£©¹æÔòÈǵĻö¡£º¯Êýµ÷Ó÷½Ê½¾ö¶¨Á˺¯Êý²ÎÊýÈëÕ»µÄ˳Ðò£¬ÊÇÓɵ÷ÓÃÕߺ¯Êý»¹ÊDZ»µ÷Óú¯Êý¸ºÔðÇå³ýÕ»ÖеIJÎÊýµÈÎÊÌ⣬¶øº¯ÊýÃûÐÞÊιæÔò¾ö¶¨Á˱àÒëÆ÷ʹ
ÓúÎÖÖÃû×ÖÐÞÊη½Ê½À´Çø·Ö²»Í¬µÄº¯Êý£¬Èç¹ûº¯ÊýÖ®¼äµÄµ÷ÓÃÔ¼¶¨²»Æ¥Åä»òÕßÃû×ÖÐÞÊβ»Æ¥Åä¾Í»á²úÉúÒÔÉϵÄÎÊÌâ¡£±¾ÎÄ·Ö±ð¶ÔCºÍC++ÕâÁ½ÖÖ±à³ÌÓïÑԵĺ¯Êýµ÷
ÓÃÔ¼¶¨ºÍº¯ÊýÃûÐÞÊιæÔò½øÐÐÏêϸµÄ½âÊÍ£¬±È½ÏÁËËüÃǵÄÒì֮ͬ´¦£¬²¢¾ÙÀý˵Ã÷ÁËÒÔÉÏÎÊÌâ³öÏÖµÄÔÒò¡£
º¯Êýµ÷ÓÃÔ¼¶¨£¨Calling Convention£©
º¯Êýµ÷ÓÃÔ¼¶¨²»½ö¾ö¶¨ÁË·¢Éúº¯Êýµ÷ÓÃʱº¯Êý²ÎÊýµÄÈëջ˳Ðò£¬»¹¾ö¶¨ÁËÊÇÓɵ÷ÓÃÕߺ¯Êý»¹ÊDZ»µ÷Óú¯Êý¸ºÔðÇå³ýÕ»ÖеIJÎÊý ......
C/C++º¯Êýµ÷ÓÃÔ¼¶¨ºÍº¯ÊýÃû³ÆÐÞÊιæÔò̽ÌÖ
×÷ÕߣºÐǹ죨oRbIt£©
ʹÓÃC/C++ÓïÑÔ¿ª·¢Èí¼þµÄ³ÌÐòÔ±¾³£Åöµ½ÕâÑùµÄÎÊÌ⣺ÓÐʱºòÊdzÌÐò±àÒëûÓÐÎÊÌ⣬µ«ÊÇÁ´½ÓµÄʱºò×ÜÊDZ¨¸æº¯Êý²»´æÔÚ£¨¾µäµÄLNK
2001´íÎ󣩣¬ÓÐʱºòÊdzÌÐò±àÒëºÍÁ´½Ó¶¼Ã»ÓдíÎ󣬵«ÊÇÖ»Òªµ÷ÓÿâÖеĺ¯Êý¾Í»á³öÏÖ¶ÑÕ»Òì³£¡£ÕâЩÏÖÏóͨ³£ÊdzöÏÖÔÚCºÍC++µÄ´úÂë»ìºÏʹÓõÄÇé¿öÏ»ò
ÔÚC++³ÌÐòÖÐʹÓõÚÈý·½µÄ¿âµÄÇé¿öÏ£¨²»ÊÇÓÃC++ÓïÑÔ¿ª·¢µÄ£©£¬ÆäʵÕâ¶¼ÊǺ¯Êýµ÷ÓÃÔ¼¶¨£¨Calling
Convention£©ºÍº¯ÊýÃûÐÞÊΣ¨Decorated
Name£©¹æÔòÈǵĻö¡£º¯Êýµ÷Ó÷½Ê½¾ö¶¨Á˺¯Êý²ÎÊýÈëÕ»µÄ˳Ðò£¬ÊÇÓɵ÷ÓÃÕߺ¯Êý»¹ÊDZ»µ÷Óú¯Êý¸ºÔðÇå³ýÕ»ÖеIJÎÊýµÈÎÊÌ⣬¶øº¯ÊýÃûÐÞÊιæÔò¾ö¶¨Á˱àÒëÆ÷ʹ
ÓúÎÖÖÃû×ÖÐÞÊη½Ê½À´Çø·Ö²»Í¬µÄº¯Êý£¬Èç¹ûº¯ÊýÖ®¼äµÄµ÷ÓÃÔ¼¶¨²»Æ¥Åä»òÕßÃû×ÖÐÞÊβ»Æ¥Åä¾Í»á²úÉúÒÔÉϵÄÎÊÌâ¡£±¾ÎÄ·Ö±ð¶ÔCºÍC++ÕâÁ½ÖÖ±à³ÌÓïÑԵĺ¯Êýµ÷
ÓÃÔ¼¶¨ºÍº¯ÊýÃûÐÞÊιæÔò½øÐÐÏêϸµÄ½âÊÍ£¬±È½ÏÁËËüÃǵÄÒì֮ͬ´¦£¬²¢¾ÙÀý˵Ã÷ÁËÒÔÉÏÎÊÌâ³öÏÖµÄÔÒò¡£
º¯Êýµ÷ÓÃÔ¼¶¨£¨Calling Convention£©
º¯Êýµ÷ÓÃÔ¼¶¨²»½ö¾ö¶¨ÁË·¢Éúº¯Êýµ÷ÓÃʱº¯Êý²ÎÊýµÄÈëջ˳Ðò£¬»¹¾ö¶¨ÁËÊÇÓɵ÷ÓÃÕߺ¯Êý»¹ÊDZ»µ÷Óú¯Êý¸ºÔðÇå³ýÕ»ÖеIJÎÊý ......