尊龙凯时人生就是搏

dzÎö Linux ÖеÄÁ㿽±´ÊÖÒÕ

±¾ÎÄ̽ÌÖLinuxÖÐ Ö÷ÒªµÄ¼¸ÖÖÁ㿽±´ÊÖÒÕ ÒÔ¼°Á㿽±´ÊÖÒÕ ÊÊÓõij¡¾°  ¡£ÎªÁËѸËÙ½¨ÉèÆðÁ㿽±´µÄ¿´·¨£¬ÎÒÃÇÄÃÒ»¸ö³£Óõij¡¾°¾ÙÐÐÒýÈ룺

ÒýÎÄ

ÔÚдһ¸öЧÀͶ˳ÌÐòʱ£¨Web Server»òÕßÎļþЧÀÍÆ÷£©£¬ÎļþÏÂÔØÊÇÒ»¸ö»ù±¾¹¦Ð§ ¡£Õâʱ¼äЧÀͶ˵ÄʹÃüÊÇ£º½«Ð§ÀͶËÖ÷»ú´ÅÅÌÖеÄÎļþ²»×öÐ޸ĵشÓÒÑÅþÁ¬µÄsocket·¢³öÈ¥£¬ÎÒÃÇͨ³£ÓÃÏÂÃæµÄ´úÂëÍê³É£º

while((n = read(diskfd, buf, BUF_SIZE)) > 0)
    write(sockfd, buf , n);

µÇ¼ºó¸´ÖÆ

»ù±¾²Ù×÷¾ÍÊÇÑ­»·µÄ´Ó´ÅÅ̶ÁÈëÎļþÄÚÈݵ½»º³åÇø£¬ÔÙ½«»º³åÇøµÄÄÚÈÝ·¢Ë͵½socket ¡£¿ÉÊÇÓÉÓÚLinuxµÄI/O²Ù×÷ĬÈÏÊÇ»º³åI/O ¡£ÕâÄÚÀïÖ÷ҪʹÓõÄÒ²¾ÍÊÇreadºÍwriteÁ½¸öϵͳŲÓã¬ÎÒÃDz¢²»ÖªµÀ²Ù×÷ϵͳÔÚÆäÖÐ×öÁËʲô ¡£ÏÖʵÉÏÔÚÒÔÉÏI/O²Ù×÷ÖУ¬±¬·¢Á˶à´ÎµÄÊý¾Ý¿½±´ ¡£

µ±Ó¦ÓóÌÐò»á¼ûij¿éÊý¾Ýʱ£¬²Ù×÷ϵͳÊ×ÏÈ»á¼ì²é£¬ÊDz»ÊÇ×î½ü»á¼û¹ý´ËÎļþ£¬ÎļþÄÚÈÝÊÇ·ñ»º±£´æÄں˻º³åÇø£¬ÈôÊÇÊÇ£¬²Ù×÷ϵͳÔòÖ±½Óƾ֤readϵͳŲÓÃÌṩµÄbufµØµã£¬½«Äں˻º³åÇøµÄÄÚÈÝ¿½±´µ½bufËùÖ¸¶¨µÄÓû§¿Õ¼ä»º³åÇøÖÐÈ¥ ¡£ÈôÊDz»ÊÇ£¬²Ù×÷ϵͳÔòÊ×ÏȽ«´ÅÅÌÉϵÄÊý¾Ý¿½±´µÄÄں˻º³åÇø£¬ÕâÒ»²½ÏÖÔÚÖ÷ÒªÒÀÀµDMAÀ´´«Ê䣬ȻºóÔÙ°ÑÄں˻º³åÇøÉϵÄÄÚÈÝ¿½±´µ½Óû§»º³åÇøÖÐ ¡£

½ÓÏÂÀ´£¬writeϵͳŲÓÃÔÙ°ÑÓû§»º³åÇøµÄÄÚÈÝ¿½±´µ½ÍøÂç¿ÍÕ»Ïà¹ØµÄÄں˻º³åÇøÖУ¬×îºósocketÔÙ°ÑÄں˻º³åÇøµÄÄÚÈÝ·¢Ë͵½Íø¿¨ÉÏ ¡£ËµÁËÕâô¶à£¬²»È翴ͼÇåÎú£º

Êý¾Ý¿½±´

´ÓÉÏͼÖпÉÒÔ¿´³ö£¬¹²±¬·¢ÁËËÄ´ÎÊý¾Ý¿½±´£¬×ÝȻʹÓÃÁËDMAÀ´´¦ÀíÁËÓëÓ²¼þµÄͨѶ£¬CPUÈÔÈ»ÐèÒª´¦ÀíÁ½´ÎÊý¾Ý¿½±´£¬Óë´Ëͬʱ£¬ÔÚÓû§Ì¬ÓëÄÚºË̬Ҳ±¬·¢Á˶à´ÎÉÏÏÂÎÄÇл»£¬ÎÞÒÉÒ²¼ÓÖØÁËCPU¼ç¸º ¡£

ÔÚ´ËÀú³ÌÖУ¬ÎÒÃÇûÓжÔÎļþÄÚÈÝ×öÈκÎÐ޸ģ¬ÄÇôÔÚÄں˿ռäºÍÓû§¿Õ¼äÍù·µ¿½±´Êý¾ÝÎÞÒɾÍÊÇÒ»ÖÖÆÌÕÅ£¬¶øÁ㿽±´Ö÷Òª¾ÍÊÇΪÏàʶ¾öÕâÖÖµÍЧÐÔ ¡£

ʲôÊÇÁ㿽±´ÊÖÒÕ£¨zero-copy£©£¿

Á㿽±´Ö÷ÒªµÄʹÃü¾ÍÊÇ×èÖ¹CPU½«Êý¾Ý´ÓÒ»¿é´æ´¢¿½±´µ½ÁíÍâÒ»¿é´æ´¢£¬Ö÷Òª¾ÍÊÇʹÓÃÖÖÖÖÁ㿽±´ÊÖÒÕ£¬×èÖ¹ÈÃCPU×ö´ó×ÚµÄÊý¾Ý¿½±´Ê¹Ãü£¬ïÔÌ­²»ÐëÒªµÄ¿½±´£¬»òÕßÈñðµÄ×é¼þÀ´×öÕâÒ»Àà¼òÆÓµÄÊý¾Ý´«ÊäʹÃü£¬ÈÃCPU½âÍѳöÀ´×¨×¢ÓÚ±ðµÄʹÃü ¡£ÕâÑù¾Í¿ÉÒÔÈÃϵͳ×ÊÔ´µÄʹÓÃÔ½·¢ÓÐÓà ¡£

ÎÒÃǼÌÐø»Øµ½ÒýÎÄÖеÄÀý×Ó£¬ÎÒÃÇÔõÑùïÔÌ­Êý¾Ý¿½±´µÄ´ÎÊýÄØ£¿Ò»¸öºÜÏÔ×ŵÄ×ÅÁ¦µã¾ÍÊÇïÔÌ­Êý¾ÝÔÚÄں˿ռäºÍÓû§¿Õ¼äÍù·µ¿½±´£¬ÕâÒ²ÒýÈëÁËÁ㿽±´µÄÒ»¸öÀàÐÍ£º

ÈÃÊý¾Ý´«Êä²»ÐèÒª¾­ÓÉ user space ¡£

ʹÓà mmap

ÎÒÃÇïÔÌ­¿½±´´ÎÊýµÄÒ»ÖÖÒªÁìÊÇŲÓÃmmap()À´È¡´úreadŲÓãº

buf = mmap(diskfd, len);
write(sockfd, buf, len);

µÇ¼ºó¸´ÖÆ

Ó¦ÓóÌÐòŲÓÃmmap()£¬´ÅÅÌÉϵÄÊý¾Ý»áͨ¹ýDMA±»¿½±´µÄÄں˻º³åÇø£¬½Ó×ŲÙ×÷ϵͳ»á°ÑÕâ¶ÎÄں˻º³åÇøÓëÓ¦ÓóÌÐò¹²Ïí£¬ÕâÑù¾Í²»ÐèÒª°ÑÄں˻º³åÇøµÄÄÚÈÝÍùÓû§¿Õ¼ä¿½±´ ¡£Ó¦ÓóÌÐòÔÙŲÓÃwrite(),²Ù×÷ϵͳֱ½Ó½«Äں˻º³åÇøµÄÄÚÈÝ¿½±´µ½socket»º³åÇøÖУ¬ÕâÒ»Çж¼±¬·¢ÔÚÄÚºË̬£¬×îºó£¬socket»º³åÇøÔÙ°ÑÊý¾Ý·¢µ½Íø¿¨È¥ ¡£Í¬ÑùµÄ£¬¿´Í¼ºÜ¼òÆÓ£º

mmap

ʹÓÃmmapÌæ»»readºÜÏÔ×ÅïÔÌ­ÁËÒ»´Î¿½±´£¬µ±¿½±´Êý¾ÝÁ¿ºÜ´óʱ£¬ÎÞÒÉÌáÉýÁËЧÂÊ ¡£¿ÉÊÇʹÓÃmmapÊÇÓмÛÇ®µÄ ¡£µ±ÄãʹÓÃmmapʱ£¬Äã¿ÉÄÜ»áÓöµ½Ò»Ð©Òþ²ØµÄÏÝÚå ¡£ÀýÈ磬µ±ÄãµÄ³ÌÐòmapÁËÒ»¸öÎļþ£¬¿ÉÊǵ±Õâ¸öÎļþ±»ÁíÒ»¸öÀú³Ì½Ø¶Ï(truncate)ʱ, writeϵͳŲÓûáÓÉÓÚ»á¼û²»·¨µØµã¶ø±»SIGBUSÐźÅÖÕÖ¹ ¡£SIGBUSÐźÅĬÈÏ»áɱËÀÄãµÄÀú³Ì²¢±¬·¢Ò»¸öcoredump,ÈôÊÇÄãµÄЧÀÍÆ÷ÕâÑù±»ÖÐÖ¹ÁË£¬Äǻᱬ·¢Ò»±ÊËðʧ ¡£

ͨ³£ÎÒÃÇʹÓÃÒÔϽâ¾ö¼Æ»®×èÖ¹ÕâÖÖÎÊÌ⣺

1. ΪSIGBUSÐźŽ¨ÉèÐźŴ¦Àí³ÌÐò

µ±Óöµ½SIGBUSÐźÅʱ£¬ÐźŴ¦Àí³ÌÐò¼òÆӵطµ»Ø£¬writeϵͳŲÓÃÔÚ±»ÖÐֹ֮ǰ»á·µ»ØÒѾ­Ð´ÈëµÄ×Ö½ÚÊý£¬²¢ÇÒerrno»á±»ÉèÖóÉsuccess,¿ÉÊÇÕâÊÇÒ»ÖÖÔã¸âµÄ´¦Àí²½·¥£¬ÓÉÓÚÄ㲢ûÓнâ¾öÎÊÌâµÄʵÖʽ¹µã ¡£

2. ʹÓÃÎļþ×â½èËø

ͨ³£ÎÒÃÇʹÓÃÕâÖÖÒªÁ죬ÔÚÎļþÐÎò·ûÉÏʹÓÃ×â½èËø£¬ÎÒÃÇΪÎļþÏòÄÚºËÉêÇëÒ»¸ö×â½èËø£¬µ±ÆäËüÀú³ÌÏëÒª½Ø¶ÏÕâ¸öÎļþʱ£¬Äں˻áÏòÎÒÃÇ·¢ËÍÒ»¸öʵʱµÄRTSIGNALLEASEÐźÅ£¬¸æËßÎÒÃÇÄÚºËÕýÔÚÆÆËðÄã¼Ó³ÖÔÚÎļþÉϵĶÁдËø ¡£ÕâÑùÔÚ³ÌÐò»á¼û²»·¨ÄÚ´æ²¢ÇÒ±»SIGBUSɱËÀ֮ǰ£¬ÄãµÄwriteϵͳŲÓûᱻÖÐÖ¹ ¡£write»á·µ»ØÒѾ­Ð´ÈëµÄ×Ö½ÚÊý£¬²¢ÇÒÖÃerrnoΪsuccess ¡£

ÎÒÃÇÓ¦¸ÃÔÚmmapÎļþ֮ǰ¼ÓËø£¬²¢ÇÒÔÚ²Ù×÷ÍêÎļþºó½âËø£º

if(fcntl(diskfd, F_SETSIG, RT_SIGNAL_LEASE) == -1) {
    perror("kernel lease set signal");
return -1;
}
/* l_type can be F_RDLCK F_WRLCK  ¼ÓËø*/
/* l_type can be  F_UNLCK ½âËø*/
if(fcntl(diskfd, F_SETLEASE, l_type)){
    perror("kernel lease set type");
return -1;
}

µÇ¼ºó¸´ÖÆ

ʹÓÃsendfile

´Ó2.1°æÄÚºË×îÏÈ£¬LinuxÒýÈëÁËsendfileÀ´¼ò»¯²Ù×÷:

#include<sys/sendfile.h>
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);

µÇ¼ºó¸´ÖÆ

ϵͳŲÓÃsendfile()ÔÚ´ú±íÊäÈëÎļþµÄÐÎò·ûinfdºÍ´ú±íÊä³öÎļþµÄÐÎò·ûoutfdÖ®¼ä´«ËÍÎļþÄÚÈÝ£¨×Ö½Ú£© ¡£ÐÎò·ûoutfd±ØÐèÖ¸ÏòÒ»¸öÌ×½Ó×Ö£¬¶øinfdÖ¸ÏòµÄÎļþ±ØÐèÊÇ¿ÉÒÔmmapµÄ ¡£ÕâЩ¾ÖÏÞÏÞÖÆÁËsendfileµÄʹÓã¬Ê¹sendfileÖ»Äܽ«Êý¾Ý´ÓÎļþת´ïµ½Ì×½ÖÉ×ÓÏ£¬·´Ö®Ôò²»¿É ¡£

ʹÓÃsendfile²»µ«ïÔÌ­ÁËÊý¾Ý¿½±´µÄ´ÎÊý£¬»¹ïÔÌ­ÁËÉÏÏÂÎÄÇл»£¬Êý¾Ý´«ËÍʼÖÕÖ»±¬·¢ÔÚkernel space ¡£

sendfileϵͳŲÓÃÀú³Ì

ÔÚÎÒÃÇŲÓÃsendfileʱ£¬ÈôÊÇÓÐÆäËüÀú³Ì½Ø¶ÏÁËÎļþ»á±¬·¢Ê²Ã´ÄØ£¿¼ÙÉèÎÒÃÇûÓÐÉèÖÃÈκÎÐźŴ¦Àí³ÌÐò£¬sendfileŲÓýö½ö·µ»ØËüÔÚ±»ÖÐֹ֮ǰÒѾ­´«ÊäµÄ×Ö½ÚÊý£¬errno»á±»ÖÃΪsuccess ¡£ÈôÊÇÎÒÃÇÔÚŲÓÃsendfile֮ǰ¸øÎļþ¼ÓÁËËø£¬sendfileµÄÐÐΪÈÔÈ»ºÍ֮ǰÏàͬ£¬ÎÒÃÇ»¹»áÊÕµ½RTSIGNALLEASEµÄÐźÅ ¡£

ÏÖÔÚΪֹ£¬ÎÒÃÇÒѾ­ïÔÌ­ÁËÊý¾Ý¿½±´µÄ´ÎÊýÁË£¬¿ÉÊÇÈÔÈ»±£´æÒ»´Î¿½±´£¬¾ÍÊÇÒ³»º´æµ½socket»º´æµÄ¿½±´ ¡£ÄÇôÄܲ»¿É°ÑÕâ¸ö¿½±´Ò²Ê¡ÂÔÄØ£¿

½èÖúÓÚÓ²¼þÉϵÄ×ÊÖú£¬ÎÒÃÇÊÇ¿ÉÒÔ°ìµ½µÄ ¡£Ö®Ç°ÎÒÃÇÊÇ°ÑÒ³»º´æµÄÊý¾Ý¿½±´µ½socket»º´æÖУ¬ÏÖʵÉÏ£¬ÎÒÃǽö½öÐèÒª°Ñ»º³åÇøÐÎò·û´«µ½socket»º³åÇø£¬ÔÙ°ÑÊý¾Ý³¤¶È´«ÒÑÍù£¬ÕâÑùDMA¿ØÖÆÆ÷Ö±½Ó½«Ò³»º´æÖеÄÊý¾Ý´ò°ü·¢Ë͵½ÍøÂçÖоͿÉÒÔÁË ¡£

×ܽáһϣ¬sendfileϵͳŲÓÃʹÓÃDMAÒýÇ潫ÎļþÄÚÈÝ¿½±´µ½Äں˻º³åÇøÈ¥£¬È»ºó½«´øÓÐÎļþλÖúͳ¤¶ÈÐÅÏ¢µÄ»º³åÇøÐÎò·ûÌí¼Ósocket»º³åÇøÈ¥£¬ÕâÒ»²½²»»á½«ÄÚºËÖеÄÊý¾Ý¿½±´µ½socket»º³åÇøÖУ¬DMAÒýÇæ»á½«Äں˻º³åÇøµÄÊý¾Ý¿½±´µ½Ð­ÒéÒýÇæÖÐÈ¥£¬×èÖ¹ÁË×îºóÒ»´Î¿½±´ ¡£

´øDMAµÄsendfile

²»¹ýÕâÒ»ÖÖÍøÂ翽±´¹¦Ð§ÊÇÐèÒªÓ²¼þÒÔ¼°Çý¶¯³ÌÐòÖ§³ÖµÄ ¡£

ʹÓÃsplice

sendfileÖ»ÊÊÓÃÓÚ½«Êý¾Ý´ÓÎļþ¿½±´µ½Ì×½ÖÉ×ÓÏ£¬ÏÞÖÆÁËËüµÄʹÓùæÄ£ ¡£LinuxÔÚ2.6.17°æ±¾ÒýÈëspliceϵͳŲÓã¬ÓÃÓÚÔÚÁ½¸öÎļþÐÎò·ûÖÐÒƶ¯Êý¾Ý£º

#define _GNU_SOURCE         /* See feature_test_macros(7) */
#include<fcntl.h>
ssize_t splice(int fd_in, loff_t *off_in, int fd_out, loff_t *off_out, size_t len, unsignedint flags);

µÇ¼ºó¸´ÖÆ

spliceŲÓÃÔÚÁ½¸öÎļþÐÎò·ûÖ®¼äÒƶ¯Êý¾Ý£¬¶ø²»ÐèÒªÊý¾ÝÔÚÄں˿ռäºÍÓû§¿Õ¼äÍù·µ¿½±´ ¡£Ëû´Ófdin¿½±´len³¤¶ÈµÄÊý¾Ýµ½fdout£¬¿ÉÊÇÓÐÒ»·½±ØÐèÊǹܵÀ×°±¸£¬ÕâÒ²ÊÇÏÖÔÚspliceµÄһЩ¾ÖÏÞÐÔ ¡£flags²ÎÊýÓÐÒÔϼ¸ÖÖÈ¡Öµ£º

SPLICEFMOVE £ºÊµÑéÈ¥Òƶ¯Êý¾Ý¶ø²»ÊÇ¿½±´Êý¾Ý ¡£Õâ½ö½öÊǶÔÄں˵ÄÒ»¸öСÌáÐÑ£ºÈôÊÇÄں˲»¿É´ÓpipeÒƶ¯Êý¾Ý»òÕßpipeµÄ»º´æ²»ÊÇÒ»¸öÕûÒ³Ã棬ÈÔÈ»ÐèÒª¿½±´Êý¾Ý ¡£Linux×î³õµÄʵÏÖÓÐЩÎÊÌ⣬ÒÔÊÇ´Ó2.6.21×îÏÈÕâ¸öÑ¡Ïî²»Æð×÷Ó㬺óÃæµÄLinux°æ±¾Ó¦¸Ã»áʵÏÖ ¡£

SPLICEFNONBLOCK £ºsplice ²Ù×÷²»»á±»ÛÕ±Õ ¡£È»¶ø£¬ÈôÊÇÎļþÐÎò·ûûÓб»ÉèÖÃΪ²»¿É±»ÛÕ±Õ·½·¨µÄ I/O £¬ÄÇôŲÓà splice ÓпÉÄÜÈÔÈ»±»ÛÕ±Õ ¡£

SPLICEFMORE£ººóÃæµÄspliceŲÓûáÓиü¶àµÄÊý¾Ý ¡£

spliceŲÓÃʹÓÃÁËLinuxÌá³öµÄ¹ÜµÀ»º³åÇø»úÖÆ£¬ ÒÔÊÇÖÁÉÙÒ»¸öÐÎò·ûҪΪ¹ÜµÀ ¡£

ÒÔÉϼ¸ÖÖÁ㿽±´ÊÖÒÕ¶¼ÊÇïÔÌ­Êý¾ÝÔÚÓû§¿Õ¼äºÍÄں˿ռ俽±´ÊÖÒÕʵÏֵģ¬¿ÉÊÇÓÐЩʱ¼ä£¬Êý¾Ý±ØÐèÔÚÓû§¿Õ¼äºÍÄں˿ռäÖ®¼ä¿½±´ ¡£Õâʱ¼ä£¬ÎÒÃÇÖ»ÄÜÕë¶ÔÊý¾ÝÔÚÓû§¿Õ¼äºÍÄں˿ռ俽±´µÄʱ»úÉÏϹ¦·òÁË ¡£Linuxͨ³£Ê¹ÓÃдʱ¸´ÖÆ(copy on write)À´ïÔ̭ϵͳ¿ªÏú£¬Õâ¸öÊÖÒÕÓÖʱ³£³Æ×÷COW ¡£

ÓÉÓÚƪ·ùÔµ¹ÊÔ­ÓÉ£¬±¾ÎIJ»ÏêϸÏÈÈÝдʱ¸´ÖÆ ¡£»òÐíÐÎòϾÍÊÇ£ºÈôÊǶà¸ö³ÌÐòͬʱ»á¼ûͳһ¿éÊý¾Ý£¬ÄÇôÿ¸ö³ÌÐò¶¼ÓµÓÐÖ¸ÏòÕâ¿éÊý¾ÝµÄÖ¸Õ룬ÔÚÿ¸ö³ÌÐò¿´À´£¬×Ô¼º¶¼ÊÇ×ÔÁ¦ÓµÓÐÕâ¿éÊý¾ÝµÄ£¬Ö»Óе±³ÌÐòÐèÒª¶ÔÊý¾ÝÄÚÈݾÙÐÐÐÞ¸Äʱ£¬²Å»á°ÑÊý¾ÝÄÚÈÝ¿½±´µ½³ÌÐò×Ô¼ºµÄÓ¦ÓÿռäÀïÈ¥£¬Õâʱ¼ä£¬Êý¾Ý²Å³ÉΪ¸Ã³ÌÐòµÄ˽ÓÐÊý¾Ý ¡£ÈôÊdzÌÐò²»ÐèÒª¶ÔÊý¾Ý¾ÙÐÐÐ޸ģ¬ÄÇôÓÀÔ¶¶¼²»ÐèÒª¿½±´Êý¾Ýµ½×Ô¼ºµÄÓ¦ÓÿռäÀï ¡£ÕâÑù¾ÍïÔÌ­ÁËÊý¾ÝµÄ¿½±´ ¡£Ð´Ê±¸´ÖƵÄÄÚÈÝ¿ÉÒÔÔÙдһƪÎÄÕÂÁË ¡£ ¡£ ¡£

³ý´ËÖ®Í⣬ÉÐÓÐһЩÁ㿽±´ÊÖÒÕ£¬ºÃ±È¹Å°åµÄLinux I/OÖмÓÉÏO_DIRECT±ê¼Ç¿ÉÒÔÖ±½ÓI/O£¬×èÖ¹ÁË×Ô¶¯»º´æ£¬ÉÐÓÐÉÐδ³ÉÊìµÄfbufsÊÖÒÕ£¬±¾ÎÄÉÐδÁýÕÖËùÓÐÁ㿽±´ÊÖÒÕ£¬Ö»ÊÇÏÈÈݳ£¼ûµÄһЩ£¬ÈôÓÐÐËȤ£¬¿ÉÒÔ×ÔÐÐÑо¿£¬Ò»Ñùƽ³£³ÉÊìµÄЧÀͶËÏîÄ¿Ò²»á×Ô¼ºË¢ÐÂÄÚºËÖÐÓйØI/OµÄ²¿·Ö£¬Ìá¸ß×Ô¼ºµÄÊý¾Ý´«ÊäËÙÂÊ ¡£

ÒÔÉϾÍÊÇdzÎö Linux ÖеÄÁ㿽±´ÊÖÒÕµÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡

ÃâÔð˵Ã÷£ºÒÔÉÏչʾÄÚÈÝȪԴÓÚÏàÖúýÌå¡¢ÆóÒµ»ú¹¹¡¢ÍøÓÑÌṩ»òÍøÂçÍøÂçÕûÀí£¬°æȨÕùÒéÓë±¾Õ¾Î޹أ¬ÎÄÕÂÉæ¼°¿´·¨Óë¿´·¨²»´ú±í尊龙凯时人生就是搏ÂËÓÍ»úÍø¹Ù·½Ì¬¶È£¬Çë¶ÁÕß½ö×ö²Î¿¼ ¡£±¾ÎĽӴýתÔØ£¬×ªÔØÇë˵Ã÷À´ÓÉ ¡£ÈôÄúÒÔΪ±¾ÎÄÇÖÕ¼ÁËÄúµÄ°æȨÐÅÏ¢£¬»òÄú·¢Ã÷¸ÃÄÚÈÝÓÐÈκÎÉæ¼°ÓÐÎ¥¹«µÂ¡¢Ã°·¸Ö´·¨µÈÎ¥·¨ÐÅÏ¢£¬ÇëÄúÁ¬Ã¦ÁªÏµ尊龙凯时人生就是搏ʵʱÐÞÕý»òɾ³ý ¡£

Ïà¹ØÐÂÎÅ

ÁªÏµ尊龙凯时人生就是搏

18523999891

¿É΢ÐÅÔÚÏß×Éѯ

ÊÂÇéʱ¼ä£ºÖÜÒ»ÖÁÖÜÎ壬9:30-18:30£¬½ÚãåÈÕÐÝÏ¢

QR code
sitemap¡¢ÍøÕ¾µØͼ