ÈÈÆÀÎÄÕÂ
62827,C ¦ÒmÍêȫָÄÏ£º½âËø½¹µã¹¦Ð§Óëʵս²Ù×÷È«ÆÊÎö
ÉîÈë̽Ë÷C ¦Òm£º´Ó½¹µã¿´·¨µ½ÊµÕ½ÐÑÄ¿
ÔÚµ±½ñ¿ìËÙÉú³¤µÄÊý×ÖÊÖÒÕÁìÓò£¬ÕÆÎÕÒ»ÃÅǿʢÇÒÎÞаµÄ±à³ÌÓïÑÔ»ò¿ª·¢Æ½Ì¨£¬ÎÞÒÉÊÇ¿ª·¢Õß¹¹½¨¸ßЧ¡¢¿É¿¿Ó¦ÓõÄÒªº¦¡£½ñÌ죬ÎÒÃǽ«ÑÛ¹â¾Û½¹ÓÚÒ»¸ö´úºÅΪ¡¸62827¡¹µÄÏîÄ¿£¬Æä½¹µã±»³ÆÎª¡°C ¦Òm¡±¡£Õâ¸öÃû×Ö×Ô¼º¿ÉÄܾʹø×Åһ˿ÉñÃØÓ뼫¿ÍÉ«²Ê£¬Ëü²¢·ÇÖ¸´úij¸ö¹ãΪÈËÖªµÄ¹ûÕæÓïÑÔ£¬¶ø¸üÏñÊÇÒ»¸ö¼¯³ÉÁËÌØ¶¨ÀíÄî¡¢¹¤¾ßÁ´ºÍ²Ù×÷·¶Ê½µÄ×ÛºÏÐÔ¿ª·¢ÇéÐλò¿ò¼Ü¡£±¾Ö¸ÄÏÖ¼ÔÚΪÄãÖÜÈ«ÆÊÎöC ¦Òm£¬½âËøÆä½¹µã¹¦Ð§£¬²¢Í¨¹ýʵս²Ù×÷ÑÝʾ£¬ÖúÄã´ÓÈëÃŵ½ÐÑÄ¿¡£

µÚÒ»Õ£º³õʶC ¦Òm¡ª¡ª½¹µãÀíÄîÓë¼Ü¹¹×ÜÀÀ
Òª¼ÝÔ¦C ¦Òm£¬Ê×ÏȱØÐèÃ÷È·ÆäÉè¼ÆÕÜѧ¡£C ¦ÒmµÄÃüÃû»òÐíÌåÏÖÁËËüÓëCÓïÑÔ¼Ò×壨C, C++, C#£©µÄijÖÖÔ¨Ô´£¨¡°C¡±£©£¬¶ø¡°¦Ò¡±£¨Sigma£©ÔÚÊýѧºÍ¹¤³ÌÖг£´ú±íÇóºÍ¡¢×ܺͣ¬ÏóÕ÷׿¯³ÉÓë¾ÛºÏ¡£Òò´Ë£¬C ¦ÒmºÜ¿ÉÄÜÊÇÒ»¸öÖ¼ÔÚ¡°¾ÛºÏCϵÓïÑÔÓÅÊÆ¡±»ò¡°¹¹½¨ÖØ´óϵͳ×ܺ͡±µÄƽ̨¡£Æä½¹µãÄ¿µÄÔÚÓÚÆ½ºâÐÔÄÜ¡¢¿ØÖÆÁ¦Ó뿪·¢Ð§ÂÊ£¬ÓÈÆäÊÊÓÃÓÚϵͳ¼¶±à³Ì¡¢¸ßÐÔÄÜÅÌË㡢ǶÈëʽ¿ª·¢»ò¶Ô×ÊÔ´ÏûºÄ¼«ÎªÃô¸ÐµÄÁìÓò¡£
´Ó¼Ü¹¹ÉÏ¿´£¬C ¦Òm²¢·Ç¼òµ¥µÄÓïÑÔ±àÒëÆ÷£¬¶øÊÇÒ»¸ö°üÀ¨ÒÔϽ¹µã×é¼þµÄÉú̬ϵͳ£º
1. ½¹µãÓïÑԹ淶£º ÔÚ±ê×¼CÓï·¨µÄ»ù´¡ÉÏ£¬ÒýÈëÁËÏÖ´úÓïÑÔÌØÕ÷£¬Èç¸üÇå¾²µÄÀàÐÍÍÆ¶Ï¡¢¼ò»¯µ«¹¦Ð§Ç¿Ê¢µÄ·ºÐÍÖ§³Ö¡¢Ë¢ÐµÄÄÚ´æ¹ÜÀíÔÓ¿ÉÄܰüÀ¨ËùÓÐȨ»òÇøÓòÄÚ´æÄ£×Ó£©£¬ÒÔ¼°¶Ô²¢·¢±à³ÌµÄÒ»µÈ¹«ÃñÖ§³Ö¡£ÆäÓï·¨Á¦Õù¾«Á·£¬ïÔÌÑù°å´úÂ룬µ«¾ø²»ÎþÉüµ×²ã¿ØÖÆÄÜÁ¦¡£
2. ÖÇÄܹ¹½¨¹¤¾ßÁ´£¨¦Ò-Builder£©£º ÕâÊÇÒ»¸ö¸ß¶È¼¯³ÉºÍ¿ÉÀ©Õ¹µÄ¹¹½¨ÏµÍ³¡£Ëü²»µ«ÄÜ´¦Öóͷ£Ô´´úÂë±àÒ룬»¹ÄÜÖÇÄܹÜÀíÏîÄ¿ÒÀÀµ£¨°üÀ¨ÍâµØºÍÔ¶³Ì£©¡¢×Ô¶¯»¯²âÊÔ¡¢ÌìÉú¶àÖÖÄ¿µÄÃûÌã¨È羲̬¿â¡¢¶¯Ì¬¿â¡¢¿ÉÖ´ÐÐÎļþ£¬ÉõÖÁÌØ¶¨Ó²¼þƽ̨µÄ¹Ì¼þ£©¡£ÆäÉèÖÃÎļþ½ÓÄÉÉùÃ÷ʽÓï·¨£¬ÇåÎúÒ×¶®¡£
3. ±ê×¼¿âÓë¦Ò½¹µã¿â£º ³ýÁËÌṩÇкÏPOSIXµÈ±ê×¼µÄ¹Å°å¿âº¯ÊýÍ⣬C ¦ÒmÓµÓÐ×Ô¼ºÇ¿Ê¢µÄ¡°¦Ò½¹µã¿â¡±¡£Õâ¸ö¿âÖØÐÂÉè¼ÆºÍʵÏÖÁ˳£ÓõÄÊý¾Ý½á¹¹£¨ÈçÏòÁ¿¡¢¹þÏ£±í¡¢×Ö·û´®£©¡¢Ëã·¨¡¢ÍøÂçͨѶ¡¢ÎļþI/OÒÔ¼°²¢·¢ÔÓǿµ÷Á㱾ǮÁýͳºÍÎÞÒì³£Çå¾²£¨¿ÉÄÜʹÓ÷µ»ØÂë»ò¿ÉÑ¡ÀàÐÍÀ´´¦Öóͷ£¹ýʧ£©¡£
4. ½»»¥Ê½¿ª·¢ÇéÐÎÓëµ÷ÊÔÆ÷£¨¦Ò-IDE/¦Ò-Debug£©£º ËäȻ֧³ÖÈκÎÎı¾±à¼Æ÷£¬µ«C ¦ÒmÌṩÁ˹ٷ½IDE²å¼þ»ò×ÔÁ¦Ó¦Ó㬼¯³ÉÁË´úÂëÖÇÄܲ¹È«£¨»ùÓÚÉî¶Èѧϰģ×ÓѵÁ·£¬ÄÜÃ÷È·ÏîÄ¿ÉÏÏÂÎÄ£©¡¢ÊµÊ±¾²Ì¬ÆÊÎö¡¢Í¼Ðλ¯µ÷ÊÔÆ÷£¨¿É¿ÉÊÓ»¯ÄÚ´æ½á¹¹ºÍ²¢·¢Ïß³Ì״̬£©ºÍÐÔÄÜÆÊÎö¹¤¾ß¡£
µÚ¶þÕ£º½âËø½¹µã¹¦Ð§¡ª¡ªÌØÕ÷Éî¶ÈÆÊÎö
Ã÷È·ÁËÕûÌå¼Ü¹¹£¬ÎÒÃÇÀ´ÖðÒ»²ð½âC ¦ÒmÄÇЩÁîÈËÕñ·ÜµÄ½¹µã¹¦Ð§¡£
1. ÄÚ´æÇå¾²ÓëÎÞη²¢·¢
ÕâÊÇC ¦Òm¿ÉÄÜ×ÅÁ¦½â¾öµÄC/C++ÁìÓòµÄ¹Å°åÄÑÌâ¡£Ëü¿ÉÄÜÒýÈëÁËÒ»Ì×¾²Ì¬ËùÓÐȨϵͳ£¨ÀàËÆRust£¬µ«Óï·¨¸ü¿¿½üC³ÌÐòԱϰ¹ß£©£¬ÔÚ±àÒëÆÚ×·×ÙËùÓбäÁ¿µÄÉúÃüÖÜÆÚ£¬¶Å¾øÊý¾Ý¾ºÕùºÍÐü´¹Ö¸Õë¡£µ«ÆäÆæÒìÖ®´¦ÔÚÓÚÌṩÁË¡°Ç徲ģʽ¡±ºÍ¡°·ÇÇå¾²Óò¡±µÄÎÞаÇл»¡£ÔÚ±ê¼ÇΪ¡°·ÇÇå¾²¡±µÄ´úÂë¿éÖУ¬¿ª·¢Õß¿ÉÒÔΪÁ˼«ÖÂÐÔÄÜ»òÓë¾ÉÓÐC´úÂë½»»¥¶øÊ¹ÓÃÔʼָÕ룬ͬʱ±àÒëÆ÷»á¸ø³öÐÑÄ¿ÖÒÑÔ¡£ÕâÖÖÉè¼Æ¼È°ü¹ÜÁËĬÈÏÇå¾²£¬ÓÖ²»°þ¶á³õ¼¶¿ØÖÆÈ¨¡£
2. À©Õ¹µÄ·ºÐÍÓëÔª±à³Ì
C ¦ÒmµÄ·ºÐÍÓâÔ½ÁËC++µÄÄ£°å¡£Ëü½ÓÄÉ¡°¿´·¨¡±À´Ô¼Êø·ºÐͲÎÊý£¬´úÂë¸üÇåÎú£¬¹ýʧÐÅÏ¢¸üÓѺá£Í¬Ê±£¬Ëü¿ÉÄܼ¯³ÉÁËǿʢµÄ±àÒëʱº¯ÊýÖ´ÐУ¨CTFE£©ºÍÔª¹¤¾ßÐÒ飬ÔÊÐí¿ª·¢ÕßÔÚ±àÒëÆÚÌìÉú´úÂë¡¢ÅÌËã³£Á¿£¬ÉõÖÁ¾ÙÐÐÖØ´óµÄÀàÐͲÙ×÷£¬´Ó¶ø½«ÔËÐÐʱ¿ªÏú½µÖÁÁ㣬ʵÏָ߶ÈÎÞаÇÒ¸ßÐÔÄܵÄÁýͳ¡£

3. °ü¹ÜÀíÓëÄ£¿éϵͳ
Àë±ðÖØ´óµÄÍ·ÎļþºÍºê°üÀ¨¡£C ¦ÒmÓµÓÐÏÖ´ú»¯µÄÄ£¿éϵͳ£¬Ê¹ÓÃÇåÎúµÄ`import`Óï¾äµ¼È빦Ч¡£ÅäºÏÖÐÑë°ü¿ÍÕ»£¨¦Ò-Crates£©£¬ÒÀÀµ¹ÜÀí±äµÃÍòÎÞһʧ¡£`¦Òm.toml`ÎļþÖÐÉùÃ÷ÒÀÀµºó£¬¹¹½¨¹¤¾ß»á×Ô¶¯´¦Öóͷ£ÏÂÔØ¡¢°æ±¾ÆÊÎöºÍ±àÒëÁ´½Ó£¬²¢Ö§³ÖÒÀÀµ¸ôÀ룬³¹µ×½â¾ö¡°ÒÀÀµµØÓü¡±ÎÊÌâ¡£
4. ¿çƽ̨ÓëÒì¹¹ÅÌËãÖ§³Ö
C ¦Òm±àÒëÆ÷ºó¶Ë¿ÉÄÜ»ùÓÚLLVM£¬Òò´Ë×ÔȻ֧³Ö´Óx86/ARMµ½RISC-V£¬ÉõÖÁGPU£¨ÈçCUDA¡¢OpenCL£©ºÍFPGAµÈ¶àÖÖÄ¿µÄƽ̨¡£Æä±ê×¼¿âÌṩÁËÌõ¼þ±àÒëÇ徲̨Áýͳ²ã£¬Ê¹µÃ±àдһ´Î´úÂ룬¼´¿É°²Åŵ½×ÀÃæ¡¢·þÎñÆ÷¡¢Òƶ¯¶Ë»òǶÈëʽװ±¸¡£¹ØÓÚÒì¹¹ÅÌË㣬Ëü¿ÉÄÜÓÐÌØ¶¨µÄÓï·¨»ò¿âÀ´Àû±ãµØ±àдÄÜÔÚCPUºÍ¼ÓËÙÆ÷ÉÏÐͬÔËÐеĴúÂë¡£
µÚÈýÕ£ºÊµÕ½²Ù×÷È«ÆÊÎö¡ª¡ª´ÓÇéÐδµ½ÏîÄ¿°²ÅÅ
ÀíÂÛ×ã¹»¸»ºñ£¬ÏÖÔÚÈÃÎÒÃÇÏÂÊÖ¡£¼ÙÉèÎÒÃÇÒª¿ª·¢Ò»¸ö¼òÆÓµÄ²¢·¢ÍøÂç·þÎñ¡ª¡ªÒ»¸ö¶àÏ̵߳ĵ¥´ÊƵÂÊͳ¼Æ·þÎñÆ÷¡£
°ì·¨Ò»£ºÇéÐÎ×°ÖÃÓëÉèÖÃ
»á¼ûC ¦Òm¹ÙÍø£¬Æ¾Ö¤ÄãµÄ²Ù×÷ϵͳÏÂÔØ×°Öðü¡£ÔÚLinux/macOSÉÏ£¬Í¨³£ÊÇÒ»¸öshell¾ç±¾£»ÔÚWindowsÉÏÔòÊÇÒ»¸ö×°ÖóÌÐò¡£×°ÖÃÍê³Éºó£¬ÔÚÖÕ¶ËÔËÐÐ `¦Òm --version` ºÍ `¦Òmc --version` À´ÑéÖ¤±àÒëÆ÷Óë¹¹½¨¹¤¾ßÊÇ·ñÍ£µ±¡£ÇéÐαäÁ¿Í¨³£»á×Ô¶¯ÉèÖá£
°ì·¨¶þ£º½¨ÉèÐÂÏîÄ¿
ʹÓÃÏÂÁîÐй¤¾ß¿ìËٴÏîÄ¿¹Ç¼Ü£º
`¦Òm new word_freq_server`
Õâ»á½¨ÉèÒ»¸öÃûΪ`word_freq_server`µÄĿ¼£¬ÄÚº¬ÒÔϽṹ£º
`word_freq_server/`
©À©¤©¤ ¦Òm.toml # ÏîÄ¿ÉèÖúÍÒÀÀµÉùÃ÷Îļþ
©À©¤©¤ src/
©¦ ©¸©¤©¤ main.¦Ò # ³ÌÐòÈë¿ÚÔ´Îļþ£¨C ¦ÒmÔ´ÎļþÀ©Õ¹Ãû¿ÉÄÜÊÇ .¦Ò »ò .csm£©
©¸©¤©¤ tests/ # ¼¯³É²âÊÔĿ¼
°ì·¨Èý£º±àд½¹µã´úÂë
·¿ª`src/main.¦Ò`£¬ÈÃÎÒÃÇ×îÏȱàÂë¡£Ê×ÏÈ£¬µ¼ÈëÐëÒªµÄÄ£¿é£º
```
import net.tcp; // ÍøÂçTCPÄ£¿é
import io; // ÊäÈëÊä³ö
import threading; // Ïß³Ì
import collections.hashmap; // ¹þÏ£±í
import sync; // ͬ²½ÔÓï
```
½Ó×Å£¬½ç˵¹²ÏíµÄÊý¾Ý½á¹¹¡£ÎÒÃǽ«Ê¹ÓÃÒ»¸öÓÉ»¥³âËø±£»¤µÄ¹þÏ£±íÀ´´æ´¢µ¥´Ê¼ÆÊý£º
```
struct SharedCounter {
mutex: sync.Mutex,
map: hashmap.HashMap<string, int>,
}
impl SharedCounter {
fn new() -> Self {
Self {
mutex: sync.Mutex::new(),
map: hashmap.HashMap::new(),
}
}
fn add_word(&self, word: string) {
let guard = self.mutex.lock(); // ×Ô¶¯Ëø£¬ÍÑÀë×÷ÓÃÓòÊÍ·Å
let count = self.map.entry(word).or_insert(0);
*count += 1;
}
fn get_stats(&self) -> string {
let guard = self.mutex.lock();
// ÃûÌû¯Êä³öͳ¼ÆÐ§¹û...
}
}
```
È»ºó£¬±àд´¦Öóͷ£¿Í»§¶ËÅþÁ¬µÄº¯Êý£¬Ëü½«ÔÚÒ»¸ö×ÔÁ¦µÄÏß³ÌÖÐÔËÐУº
```
fn handle_client(stream: net.tcp.TcpStream, counter: &SharedCounter) -> io.Result<()> {
let mut reader = io.BufReader::new(stream);
let mut line = string::new();
while reader.read_line(&mut line)? > 0 {
for word in line.split_whitespace() {
counter.add_word(word.to_lowercase());
}
line.clear();
}
Ok(())
}
```
×îºó£¬ÔÚ`main`º¯ÊýÖн¨Éè¼àÌýÌ×½Ó×ֺ͹²Ïí¼ÆÊýÆ÷£¬²¢½øÈëÖ÷Ñ»·½ÓÊÜÅþÁ¬£º
```
fn main() {
let listener = net.tcp::TcpListener::bind("127.0.0.1:8080").expect("°ó¶¨µØÖ·Ê§°Ü");
let counter = SharedCounter::new();
let arc_counter = sync.Arc::new(counter); // Ô×ÓÒýÓüÆÊý£¬ÓÃÓÚÇå¾²¹²Ïí
println!("µ¥´ÊƵÂÊ·þÎñÆ÷ÔËÐÐÔÚ 127.0.0.1:8080");
for stream_result in listener.incoming() {
match stream_result {
Ok(stream) => {
let counter_clone = arc_counter.clone();
threading::spawn(move || { // Ϊÿ¸ö¿Í»§¶Ë½¨ÉèÐÂÏß³Ì
if let Err(e) = handle_client(stream, &counter_clone) {
eprintln!("¿Í»§¶Ë´¦Öóͷ£¹ýʧ: {}", e);
}
});
}
Err(e) => eprintln!("ÅþÅþÁÚÊÜʧ°Ü: {}", e),
}
}
}
```
°ì·¨ËÄ£º¹¹½¨¡¢²âÊÔÓëÔËÐÐ
ÔÚÏîÄ¿¸ùĿ¼£¬Ö´ÐÐ `¦Òm build` ¾ÙÐбàÒë¡£C ¦Òm¹¹½¨¹¤¾ß»áÏÂÔØËùÓÐÒÀÀµ£¨±¾ÀýÖпÉÄÜûÓÐÌØÊâÒÀÀµ£©£¬²¢ÐбàÒ룬²¢ÌìÉúÓÅ»¯ºóµÄ¿ÉÖ´ÐÐÎļþ£¬Ä¬ÈÏλÓÚ `target/release/` Ŀ¼Ï¡£Ê¹Óà `¦Òm run` ¿ÉÒÔÖ±½Ó±àÒë²¢ÔËÐС£Äã¿ÉÒÔ·¿ªÁíÒ»¸öÖÕ¶Ë£¬Óà `telnet 127.0.0.1 8080` »ò `nc` ÏÂÁîÅþÁ¬·þÎñÆ÷£¬ÊäÈ뼸ÐÐÓ¢Îľä×Ó£¬ÊÓ²ì·þÎñÆ÷ÈçÄÇÀïÖã¨ËäÈ»Õâ¸öʾÀý·þÎñÆ÷ûÓÐÉè¼Æ·µ»ØÏìÓ¦£¬µ«ÄÚ²¿¼ÆÊýÔÚÒ»Á¬£©¡£
°ì·¨Î壺ÐÔÄÜÆÊÎöÓëÓÅ»¯
C ¦ÒmÄÚÖÃǿʢµÄÆÊÎö¹¤¾ß¡£ÔËÐÐ `¦Òm profile --output flamegraph target/release/word_freq_server` ²¢Ä£ÄâһЩ¿Í»§¶ËÇëÇ󣬹¤¾ß»áÌìÉúÒ»¸ö»ðÑæÍ¼£¬Ö±¹ÛչʾCPUʱ¼äÔÚÄÄЩº¯ÊýÖÐÏûºÄ¡£Äã¿ÉÄÜ·¢Ã÷Ëø¾ºÕù³ÉΪƿ¾±£¬½ø¶ø¿ÉÒÔ˼Á¿Ê¹ÓöÁÐ´Ëø£¨`sync.RwLock`£©»ò½«È«¾Ö¼ÆÊýÆ÷¸ÄΪÏß³ÌÍâµØ¼ÆÊýÆ÷°´ÆÚºÏ²¢µÈÓÅ»¯Õ½ÂÔ¡£
°ì·¨Áù£º½»Ö¯±àÒëÓë°²ÅÅ
ÈçÐè°²Åŵ½ARM¼Ü¹¹µÄǶÈëʽװ±¸£¬Ö»ÐèÖ´ÐУº
`¦Òm build --target=armv7-unknown-linux-gnueabihf`
¹¹½¨¹¤¾ß»á×Ô¶¯Ê¹ÓöÔÓ¦µÄ¹¤¾ßÁ´£¬ÌìÉúARMƽ̨µÄ¿ÉÖ´ÐÐÎļþ£¬½«Æä¿½±´µ½×°±¸Éϼ´¿ÉÔËÐС£
±¾ÎÄÎÊÌ⣺¡¶62827,C ¦ÒmÍêȫָÄÏ£º½âËø½¹µã¹¦Ð§Óëʵս²Ù×÷È«ÆÊÎö¡·










½ÒÏþ̸ÂÛ