Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÁÄÁÄPythonÖеĶàÏß³Ì
 
×÷ÕߣºÁõ¶¬ À´Ô´ÓÚ£º¼«¿ÍÍ·Ìõ ·¢²¼ÓÚ£º 2017-3-7
  2119  次浏览      28
 

С²½ÂýÅÜ,ÁÄÁÄPythonÖеĶàÏß³Ì

ÔÚ¿ªÊ¼½ñÌìµÄ»°Ìâ֮ǰ£¬¼òµ¥µÄÀ´¿´ÓйØPythonµÄÌåϵ½á¹¹¡£ÎªÁË·½±ãÆð¼ûÎÒ×öÒ»Õŵ¼Í¼£¬Èôó¼ÒÓиöºê¹ÛµÄÈÏʶ¡£

½ñÌì±¾À´×¼±¸È«ÃæµÄÁÄÁÄÓйظßÐÔÄܲ¢·¢Õâ¸ö»°ÌâÀ´×Å£¬µ«ÊÇÖÜÄ©ÂíÉÏÒªÀ´Á˰¡¡£ËùÒÔÎÒ¾ÍÈ¡ÁËÆäÖеÄÒ»µãÀ´½éÉÜ£¬¹ØÓÚÆäËûµÄ·½Ã棬ÓÐÐËȤµÄС»ï°é¿ÉÒÔºÍÎÒ½»Á÷¡£Ì¸¸ßЧ²¢·¢£¬ÍùÍùÍÑÀë²»ÁËÒÔÏÂÈýÖÖ·½°¸£º

1.½ø³Ì£ºÃ¿¸öÂß¼­¿ØÖÆÁ÷¶¼ÊÇÒ»¸ö½ø³Ì,ÓÉÄÚºËÀ´µ÷¶ÈºÍά»¤¡£ÒòΪ½ø³ÌÓжÀÁ¢µÄÐéÄâµØÖ·¿Õ¼ä£¬ÏëÒªºÍÆäËû¿ØÖÆÁ÷ͨÐűØÐëÒÀ¿¿ÏÔʾµÄ½ø³Ì¼äͨÐÅ£¬¼´ÎÒÃÇËù˵µÄIPC»úÖÆ

2.Ị̈߳ºÏß³ÌÓ¦¸ÃÊÇÎÒÃÇ×îΪÊìÖªµÄ¡£Ëü±¾ÖÊÊÇÔËÐÐÔÚÒ»¸öµ¥Ò»½ø³ÌÉÏÏÂÎÄÖеÄÂß¼­Á÷£¬ÓÉÄں˽øÐе÷¶È¡£

3. I/O¶à·¸´ÓãºÓ¦ÓóÌÐòÔÚÒ»¸ö½ø³ÌµÄÉÏÏÂÎÄÖÐÏÔʽµØµ÷¶ÈËûÃÇ×Ô¼ºµÄÂß¼­Á÷.Âß¼­Á÷±»Ä£ÐÍ»¯Îª×´Ì¬»ú£¬Êý¾Ýµ½´ïÎļþÃèÊö·ûÖ®ºó£¬Ö÷³ÌÐòÏÔʽµØ´ÓÒ»¸ö״̬ת»»ÎªÁíÒ»¸ö״̬¡£ÒòΪ³ÌÐò¶¼ÊÇÒÔÒ»¸öµ¥¶ÀµÄ½ø³Ì£¬ËùÒÔËùÓеÄÁ÷¶¼¹²Ïíͬһ¸öµØÖ·¿Õ¼ä¡£»ù±¾µÄ˼·¾ÍÊÇʹÓÃselectº¯ÊýÒªÇóÄÚºË¹ÒÆð½ø³Ì,Ö»ÓÐÒ»¸ö»ò¶à¸öI/Oʼþ·¢Éúºó,²Å½«¿ØÖÆÈ¨·µ»Ø¸øÓ¦ÓóÌÐò¡£

¿´ÆðÀ´ÁîÈËÄÑÒÔÀí½â£¬µ«ÐÒÔ˵ÄÊÇPythonÖÐÕë¶ÔÕâÈý·½Ãæ¶¼ÌṩÁËÏìÓ¦µÄÖ§³Ö£¬¼ò»¯ÁËÎÒÃǵIJÙ×÷¡£ÄǽñÌìÔÛ¾ÍÁÄÁÄÆäÖеÄÒ»µã¨CÏ̡߳£ÎªÊ²Ã´Ñ¡ÔñÏß³ÌÄØ£¿Ò»·½Ã濼Âǵ½´ó²¿·ÖÈ˶¼ÓÐÏß³ÌÕâ¸ö¸ÅÄÁíÒ»·½Ã濼ÂÇÏà±È½ø³ÌÏ̸߳üÇáÁ¿¼¶£¬Ïà±ÈЭ³Ì£¬Ï̸߳üÒ×ÓÚÀí½â¡£½ø³ÌºÍÏß³ÌÖ®¼äµÄ¹ØÏµ¿ÉÒÔÓÃÒ·þ×î¼òµ¥µÄͼÀ´±íʾ£º

Ï̵߳Ä״̬

ÈκÎÒ»ÃÅÖ§³ÖÏ̵߳ÄÓïÑÔ¶¼¿ÉÒԾ߱¸ÒÔϼ¸ÖÖÔËÐÐ״̬£¬ÎÞÂÛÊÇÄã×öJava¡¢Python»¹ÊÇC£¬Ê×ÏÈÀ´¿´ÏÂÃæÒ»ÕÅͼ£º

ÔÚÕâÀïÎÒ¼òµ¥À´½âÊÍÒÔÏÂÕ⼸ÖÖ״̬µÄº¬Ò壺

н¨£ºÊ¹ÓÃÏ̵߳ĵÚÒ»²½¾ÍÊÇ´´½¨Ị̈߳¬´´½¨ºóµÄÏß³ÌÖ»ÊǽøÈë¿ÉÖ´ÐеÄ״̬,Ò²¾ÍÊÇRunnable

Runnable£º½øÈë´Ë״̬µÄÏ̻߳¹²¢Î´¿ªÊ¼ÔËÐУ¬Ò»µ©CPU·ÖÅäʱ¼äƬ¸øÕâ¸öÏ̺߳󣬸ÃÏ̲߳ÅÕýʽµÄ¿ªÊ¼ÔËÐÐ

Running£ºÏß³ÌÕýʽ¿ªÊ¼ÔËÐУ¬ÔÚÔËÐйý³ÌÖÐÏ߳̿ÉÄÜ»á½øÈë×èÈûµÄ״̬,¼´Blocked

Blocked£ºÔÚ¸Ã״̬Ï£¬Ïß³ÌÔÝÍ£ÔËÐУ¬½â³ý×èÈûºó£¬Ïß³Ì»á½øÈëRunnable״̬£¬µÈ´ýCPUÔٴηÖÅäʱ¼äƬ¸øËü

½áÊø£ºÏ̷߳½·¨Ö´ÐÐÍê±Ï»òÕßÒòΪÒì³£ÖÕÖ¹·µ»Ø

ÆäÖÐ×ÔÓµÄÊÇÏ̴߳ÓRunning½øÈëBlocked״̬£¬Í¨³£ÓÐÈýÖÖÇé¿ö£º

˯ÃߣºÏß³ÌÖ÷¶¯µ÷ÓÃsleep()»òjoin()·½·¨ºó

µÈ´ý£ºÏß³ÌÖе÷ÓÃwait()·½·¨£¬´ËʱÐèÒªÓÐÆäËûÏß³Ìͨ¹ýnotify()·½·¨À´»½ÐÑ

ͬ²½£ºÏß³ÌÖлñÈ¡Ïß³ÌËø,µ«ÊÇÒòΪ×ÊÔ´ÒѾ­±»ÆäËûÏß³ÌÕ¼ÓÃʱ

µ½ÏÖÔÚ£¬ÎÒÃǶÔÏß³ÌÓиö»ù±¾µÄ¸ÅÄ¹â˵²»Á·¼Ù°Ñʽ£¬ÏÂÃæÎÒÃǾÍͨ¹ýÊÇÈý¸öСµÄʾÀýÀ´ÁÄÁÄÏ̵߳ÄʹÓÃÒÔ¼°Ïß³ÌÖÐ×îÖÕµÄÁ½¸ö¸ÅÄͬ²½ºÍͨÐÅ¡£

Ï̼߳òµ¥Ê¹ÓÃ

Pythonµ±ÖÐҪʵÏÖ¶àÏß³ÌÓÐÁ½ÖÖ·½Ê½£ºÒ»ÖÖÊÇʹÓõͼ¶µÄ_threadÄ£¿é£¬ÁíÒ»Öָ߼¶threadingÄ£¿é£¬Ïà±È¶øÑÔ,ÎÒÍÆ¼öʹÓÃthreadingÄ£¿é¡£ÁíÍâÎÒÖ»ÍÆ¼öÓÃÓÚ¶àÏß³ÌÓÃÓÚ´¦ÀíÓйØI/OµÄ²Ù×÷,²»È»·´¶øÔì³ÉÐÔÄÜϽµ¡£ÔÚ¿ªÊ¼Ö®Ç°ÄØ£¬ÏÈÀ´Á˽âÏÂthreadingÄ£¿é¸øÎÒÌṩÄÄЩ³£ÓõÄÀࣺ Thread,Lock,RLock,Condition,Event,Semaphore,TimerºÍLocal¡£Õ⼸¸öÀà¿Éν¿ª·¢¶àÏß³ÌÖеÄÉñ±øÀûÆ÷¡£µ«ÊǽéÓÚÆª·ù£¬Ô۾Ͳ»Õ¹¿ª½²ÁË¡£

ÎÒÃÇÖ±½ÓÀ´¿´ÈçºÎʹÓöàỊ̈߳¬Õâ²ÅÊÇÖÁ¹ØÖØÒªµÄ£¬ÓоäÀÏ»°ÊÇÕâô˵µÄ£ºÒªÏëÈÃСº¢×ÓÅܵÃÏÈÈÃËûѧ»á×ß¡£ÎÒÃÇÕâ¾Í×ßÁ½²½£º

import threading
def run(number):
print(threading.currentThread().getName() + '\n')
print(number)
if name == '__main':
for i in range(10):
#´´½¨Ïß³Ì
mythread = threading.Thread(target=run, args=(i,))
mythread.start()

¶àÏ̵߳Ĵ´½¨ºÍÔËÐж¼ÊÇÌ×·°¡£¬Ð´µÄ¶àÁË×ÔÈ»ÊìÁË£¬À´¿´¿´ÔËÐнá¹û£º

Thread-1,value=0 
Thread-2,value=1
Thread-3,value=2
Thread-4,value=3
Thread-5,value=4
Thread-6,value=5
Thread-7,value=6
Thread-8,value=7
Thread-9,value=8
Thread-10,value=9

ͬ²½ÓëͨÐÅ

¶àÏ߳̿ª·¢ÖÐ×îÄѵÄÎÊÌâ²»ÊÇÈçºÎʹÓÃ,¶øÊÇÈçºÎд³öÕýÈ·¸ßЧµÄ´úÂë,Ҫд³öÕýÈ·¶ø¸ßЧµÄ´úÂë±ØÐëÒªÀí½âÁ½¸öºÜÖØÒªµÄ¸ÅÄͬ²½ºÍͨÐÅ¡£ËùνµÄͨÐÅÖ¸µÄÊÇÏß³ÌÖ®¼äÈçºÎ½»»»ÏûÏ¢£¬¶øÍ¬²½ÔòÓÃÓÚ¿ØÖƲ»Í¬Ïß³ÌÖ®¼ä²Ù×÷·¢ÉúµÄÏà¶Ô˳Ðò¡£¼òµ¥µã˵ͬ²½¾ÍÊÇ¿ØÖƶà¸öÏ̷߳ÃÎÊ´úÂëµÄ˳Ðò£¬Í¨ÐžÍÊÇÏß³ÌÖ®¼äÈçºÎ´«µÝÏûÏ¢¡£ÔÚpythonÖÐʵÏÖͬ²½µÄ×î¼òµ¥µÄ·½°¸¾ÍÊÇʹÓÃËø»úÖÆ£¬ÊµÏÖͨÐÅ×î¼òµ¥µÄ·½°¸¾ÍÊÇEvent¡£ÏÂÃæ¾ÍÀ´¿´¿´ÕâÁ½ÕߵľßÌåʹÓá£

Ïß³Ìͬ²½

µ±¶à¸öÏß³Ìͬʱ·ÃÎÊͬһ×ÊÔ´µÄʱºò£¬¾Í»á·¢Éú¾ºÕù£¬ÕâÓеãÏñºÜ¶à¸öÄÐÐÔ¶¼ÔÚ׷ͬһ¸öÃÃÖ½Ò»Ñù£¬½á¹ûÊDz»¿ÉÔ¤ÆÚµÄ¡£Òò´ËÓбØÒªÊ¹ÓÃijÖÖ»úÖÆÀ´±£Ö¤Ã¿¸öÄÐÉú¶¼Óлú»áºÍÅ®ÉúÏà´¦£¬ÕâÓеãÏñ½«Ð¡¹ÃÄï·ÅÔÚÒ»¼ä·¿×ÓÀï,È»ºó½øÈ¥µÄÄÐÉúËøÉÏÃÅ¡£ÏÂÒ»¸öÄÐÉúÒªÏë½øÈ¥¡£±ØÐëµÈ´ýÉÏÒ»¸öÄÐÉú³öÀ´¡£Ö»²»¹ýÔÚÕâÀï½ÐÏß³ÌËø¡£

PythonµÄthreadingÄ£¿éΪÎÒÃÇÌṩÁËÏß³ÌËø¹¦ÄÜ£¬ÔÚthreadingÖÐÌṩRLock¶ÔÏó£¬RLock¶ÔÏóÄÚ²¿Î¬»¤×ÅÒ»¸öLock¶ÔÏó£¬ËüÊÇÒ»ÖÖ¿ÉÖØÈëËø¡£¶ÔÓÚLock¶ÔÏó¶øÑÔ£¬Èç¹ûÒ»¸öÏß³ÌÁ¬ÐøÁ½´Î½øÐÐacquire²Ù×÷£¬ÄÇôÓÉÓÚµÚÒ»´ÎacquireÖ®ºóûÓÐrelease£¬µÚ¶þ´Îacquire½«¹ÒÆðÏ̡߳£Õâ»áµ¼ÖÂLock¶ÔÏóÓÀÔ¶²»»árelease£¬Ê¹µÃÏß³ÌËÀËø¡£¶øRLock¶ÔÏóÔÊÐíÒ»¸öÏ̶߳à´Î¶ÔÆä½øÐÐacquire²Ù×÷£¬ÒòΪÔÚÆäÄÚ²¿Í¨¹ýÒ»¸öcounter±äÁ¿Î¬»¤×ÅÏß³ÌacquireµÄ´ÎÊý¡£¶øÇÒÿһ´ÎµÄacquire²Ù×÷±ØÐëÓÐÒ»¸örelease²Ù×÷ÓëÖ®¶ÔÓ¦£¬ÔÚËùÓеÄrelease²Ù×÷Íê³ÉÖ®ºó£¬±ðµÄÏ̲߳ÅÄÜÉêÇë¸ÃRLock¶ÔÏó¡£

ͨ¹ýËø»úÖÆ£¬×îÖÕ¶àÏ̷߳ÃÎʹ²Ïí×ÊÔ´µÄ¹ý³Ì¾ÍÀàËÆÒÔÏÂ:

ÉÏͼÆäʵÑÝʾÁËÔÚʹÓÃËøÀ´½â¾öÏß³Ìͬ²½×î±¾ÖʵÄÒ»µã£º½«ËùÓÐÏ̶߳Թ²Ïí×ÊÔ´µÄ¶Áд²Ù×÷´®Ðл¯¡£

import threading

mylock = threading.RLock()
num = 0


class WorkThread(threading.Thread):
def __init__(self, name):
threading.Thread.__init__(self)
self.t_name = name

def run(self):
global num
while True:
mylock.acquire()
print('\n%s locked, number: %d' % (self.t_name, num))
if num >= 4:
mylock.release()
print('\n%s released, number: %d' % (self.t_name, num))
break
num += 1
print('\n%s released, number: %d' % (self.t_name, num))
mylock.release()


def test():
thread1 = WorkThread('A-Worker')
thread2 = WorkThread('B-Worker')
thread1.start()
thread2.start()


if __name__ == '__main__':
test()

À´¿´¿´ÔËÐнá¹û:

A-Worker locked, number: 0

A-Worker released, number: 1

A-Worker locked, number: 1

A-Worker released, number: 2

A-Worker locked, number: 2

A-Worker released, number: 3

A-Worker locked, number: 3

A-Worker released, number: 4

A-Worker locked, number: 4

A-Worker released, number: 4

B-Worker locked, number: 4

B-Worker released, number: 4

ÓÐЩͬѧ»áÎʳýÁËLockºÍRLock»¹ÓÐÆäËûµÄ·½Ê½À´ÊµÏÖÀàËÆµÄЧ¹ûô£¿µ±È»£¬±ÈÈçConditionºÍSemaphore¶¼ÓÐÀàËÆµÄ¹¦ÄÜ£¬ÆäÖÐConditionÊÇÔÚLock/RLockµÄ»ù´¡ÉÏÔٴΰü×°¶ø³É£¬¶øSemaphoreµÄÔ­ÀíºÍ²Ù×÷ϵͳµÄPV²Ù×÷Ò»Ö¡£Ö®ËùÒÔ²»Ï¸ËµµÄÔ­ÒòÔÚÓÚ»ù±¾ËûÃǵĻù±¾Ê¹ÓúÍÔ­Àí²¢ÎÞ±¾ÖÊÇø±ð¡£ÎÒ¸öÈËÒ²Ò»Ö±ÈÏΪԽ¸´ÔӵĶ«Î÷±³ºóÔ½ÊÇÓмòµ¥µÄÔ­Àí£¬µ±È»»¶Ó­ÓÐÐËȤµÄͬѧºÍÎÒ½øÐÐ̽ÌÖ¡£

Ïß³ÌͨÐÅ

Ôںܶàʱºò£¬ÎÒÃÇÐèÒªÔÚÏ̼߳䴫µÝÏûÏ¢£¬Ò²½Ð×÷Ïß³ÌͨÐÅ¡£PythonÖÐÌṩµÄEvent¾ÍÊÇ×î¼òµ¥µÄͨÐÅ»úÖÆÖ®Ò»¡£Ê¹ÓÃthreading.Event¿ÉÒÔʹһ¸öÏ̵߳ȴýÆäËûÏ̵߳Ä֪ͨ£¬ÎÒÃǰÑÕâ¸öEvent´«µÝµ½Ï̶߳ÔÏóÖУ¬EventĬÈÏÄÚÖÃÁËÒ»¸ö±êÖ¾£¬³õʼֵΪFalse¡£Ò»µ©¸ÃÏß³Ìͨ¹ýwait()·½·¨½øÈëµÈ´ý״̬£¬Ö±µ½ÁíÒ»¸öÏ̵߳÷ÓøÃEventµÄset()·½·¨½«ÄÚÖñêÖ¾ÉèÖÃΪTrueʱ£¬¸ÃEvent»á֪ͨËùÓеȴý״̬µÄÏָ̻߳´ÔËÐС£ÏÈÀ´¿´¿´EventÖÐһЩ³£Óõķ½·¨:

À´¿´¸ö¼òµ¥Ê¾Àý£¬ÎÒÃÇÔÝÇÒ¼ÙÉèÄãÓÐ6¸öÃÃÖ½ÐèÒª½ÐËýÃÇÆð´²£¬ÕâʱºòÄã¸ÃÔõô×öÄØ£¿

import threading
import time


class WorkThread(threading.Thread):
def __init__(self, signal):
threading.Thread.__init__(self)
self.singal = signal

def run(self):
print("ÃÃÖ½ %s,˯¾õÁË ..." % self.name)
self.singal.wait()
print("ÃÃÖ½ %s, Æð´²..." % self.name)


if __name__ == "__main__":
singal = threading.Event()
for t in range(0, 6):
thread = WorkThread(singal)
thread.start()

print("ÈýÃëÖÓºó½ÐÃÃÖ½Æð´² ")
time.sleep(3)
#»½ÐÑ×èÈûÖеÄÃÃÖ½
singal.set()

ÕâÀïµÄµÄÄã¾Í³äµ±ÁËÖ÷Ị̈߳¬Ã¿¸öÃÃÖ½¾ÍÊÇÒ»¸ö×ÓỊ̈߳¬²»³öÒâÍâÈýÃëÖ®ºóÄã¾Í»á°´Ê±»½ÐÑËùÓеÄÃÃÖ½ÁË:

ÃÃÖ½ Thread-1,˯¾õÁË ...
ÃÃÖ½ Thread-2,˯¾õÁË ...
ÃÃÖ½ Thread-3,˯¾õÁË ...
ÃÃÖ½ Thread-4,˯¾õÁË ...
ÃÃÖ½ Thread-5,˯¾õÁË ...
ÃÃÖ½ Thread-6,˯¾õÁË ...
ÈýÃëÖÓºó½ÐÃÃÖ½Æð´²
ÃÃÖ½ Thread-1, Æð´²...
ÃÃÖ½ Thread-2, Æð´²...
ÃÃÖ½ Thread-5, Æð´²...
ÃÃÖ½ Thread-4, Æð´²...
ÃÃÖ½ Thread-3, Æð´²...
ÃÃÖ½ Thread-6, Æð´²...

ʹÓÃEventʵÏÖÏß³ÌͨÐÅͨÐŹÌÈ»¿ÉÒÔ£¬µ«ÊÇÁíÒ»ÖÖ½øÐÐÏß³ÌͨÐŵķ½Ê½ÊǽèÖú¶ÓÁÐ,Ò²¾ÍÊÇQueue¡£ÔÚpythonµÄ±ê×¼¿âÖÐÌṩÁËḬ̈߳²È«µÄ¶ÓÁУ¬»ùÓÚFIFO(ÏȽøÏȳö)ʵÏÖ£¬¿ÉÒÔ·½±ãµÄ°ïÖúÎÒÃÇʵÏÖÏ̼߳äµÄÏûÏ¢´«µÝ£¬Ê¹Ó÷dz£¼òµ¥£¬ÆäÔ­ÀíÒ²²»ÄÑ£¬ÓÃÒ»Õżòµ¥µÄͼչʾ:

ÁíÍ⣬·²ÊÇ·ûºÏ¸ÃÖֽṹµÄ¶àÏß³ÌͨÐŹý³ÌÎÒÃdzÆÖ®ÎªÉú²úÕß-Ïû·ÑÕßÄ£ÐÍ¡£

Ï̳߳Ø

Æäʵ£¬ÓйضàÏ̵߳ÄʹÓÃʱ·Ç³£¼òµ¥µÄ£¬¸ü¶àµÄÊǸù¾Ý¾ßÌåµÄÒµÎñÇé¿ö±àдÏàÓ¦µÄÂß¼­.³õ´ÎÖ®Íâ,¿¼ÂÇ´¦ÀíÆ÷µÄ×ÊÔ´±Ï¾¹ÊÇÓÐÏÞµÄ,²»ÄÜһζµÄ´´½¨Ïß³Ì,ÎÒÔø¿´µ½ÓÐЩС»ï°éÔÚдÅÀ³æµÄʱºò£¬100¸öurl¾Í´´½¨ÁË100¸öỊ̈߳¬Æäºó¹û¿ÉÏë¶øÖª£¬Òò´Ëµ±ÓÐÐèÇóÒªÓõ½ºÜ¶àÏß³Ìʱ£¬¿¼ÂÇʹÓÃÏ̳߳ؼ¼Êõ¡£ ·ÖÏí½áÊøºó£¬Í¬Ñ§ÃÇ»¹ÏòÁõ¶¬Çë½ÌÁËÔÚ¹¤×÷ѧϰÖÐÓöµ½µÄÏà¹ØÎÊÌ⣬±ÈÈç

1.Éú²úÕßÏû·ÑÕßģʽÊDz»ÊÇÀàËÆÓÚ·¢²¼Õß¶©ÔÄÕßģʽ£¿

2.ÇëÎÊÒѾ­´æÔÚÈ«¾ÖËøÁË£¬ÎªÊ²Ã´»¹»áÓÐthreading.LockµÈ? ²»Ã÷°×È«¾ÖËøµÄ×÷ÓÃÊÇʲô

3.µ¥Ï̵߳ÄIO¸´Óã¨REACTOR£©ºÍ¶àḬ̈߳æµÄIO¸´ÓÃÇø±ðÔÚÄÄ

4.¹ØÓÚThreadÀ࣬target²ÎÊý£¬´«ÈëµÄº¯ÊýÈç¹ûÓзµ»ØÖµÈçºÎ´¦Àí

   
2119 ´Îä¯ÀÀ       28
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ