From ffa1e4c1f9ccca19829c874f1b3e9418128e3d82 Mon Sep 17 00:00:00 2001 From: "kunming.wang" Date: Wed, 26 Jul 2023 16:49:52 +0800 Subject: [PATCH 1/3] =?UTF-8?q?docs=20(time):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E6=97=B6=E9=97=B4=E5=BA=94=E7=94=A8=E6=8C=87?= =?UTF-8?q?=E5=AF=BC=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 固件版本: N/A 是否需要文案翻译: 是 --- .../media/system/time/time-clock-signal.png | Bin 0 -> 7607 bytes .../media/system/time/time-introduction.png | Bin 0 -> 19921 bytes .../zh/media/system/time/time-ntp-proto.png | Bin 0 -> 5940 bytes docs/Application_guide/zh/system/time.md | 325 ++++++++++++++++++ 4 files changed, 325 insertions(+) create mode 100644 docs/Application_guide/zh/media/system/time/time-clock-signal.png create mode 100644 docs/Application_guide/zh/media/system/time/time-introduction.png create mode 100644 docs/Application_guide/zh/media/system/time/time-ntp-proto.png create mode 100644 docs/Application_guide/zh/system/time.md diff --git a/docs/Application_guide/zh/media/system/time/time-clock-signal.png b/docs/Application_guide/zh/media/system/time/time-clock-signal.png new file mode 100644 index 0000000000000000000000000000000000000000..74a01375429c6c728e22a73824bfa0baa7270232 GIT binary patch literal 7607 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 CfpFUZ literal 0 HcmV?d00001 diff --git a/docs/Application_guide/zh/media/system/time/time-introduction.png b/docs/Application_guide/zh/media/system/time/time-introduction.png new file mode 100644 index 0000000000000000000000000000000000000000..7e36b0302f9e582c342185ab0f91b0e7d4a14405 GIT binary patch literal 19921 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

@S8!sMHMwF4NR1xG7;KnhScM0e z>0|-i&V3i_hEx%=PtA^JobxUfIgGyxL41>XmvImNo>k1OU6GdWD3lHjI|c-^2Y~B* zqp8|}T@Yw+c;?k|2dT29-nTrQu%G%XU*`o~gdQza9`ex_LvY z@RtBCg&ADFw`ueS>tfcbKq-LjY>FV((~HSm={_bO)aB$d(p}0$fyc5l9($il{^>hV zGOif_JpFt}YTS2YM!98HKX?DnlCScfo9T)haV;D3rns)RI_tZ2%P#$wTa+GtNe7K( z)w-eZoWO%&j0Zmn9?6dZCDfDfr7nqfCM63EPTXeY5A{q;Ovi?{heonYMyAIfp(%D;exo^Z``s#(uYZAxn zzd?Wy;K{`xb}u51NAlbHx^q-#A@XEEDuCJu(=A>do~E;^1r$F9 z>okQ-SY`p9N|vF+e^xoKDw|eq{b4J~7PJf&iu42E41bk1*y1Z{@wWhy%!ef3Is)#%%4c(I;eZ4Mak6yp%T-V6Cv2#Uld-<}2E z)S-gR?$W)8Su*a`cp)aHwL>XgRoUB%21Q=^WKLxa+5wo$L|JPFs=4wXOA0y+?+83Z zo+g{!(4jsfHvI{XfXVx!{;?tlzIj)m(vj4T5Ri}^1ZI;U>n|_D=kIXK`s;V-PcKWs zwn7|ub}(MqlQ^CWAW!KU68TN;jk zHg*1PZHN8}XjVA6?@_9cymK91f9Lu8MicV4bFDtgfmR)IC4FRu8$_MA4cuaemIKJH zW=4ka=Q?$Ff$-;wZ2oKK$lks$(KVXURTzsgxts>$CHnZRLbHUMrV8qObn3@{aser` zY)x+adAR`&aMAl3X!BCa;i#=rull`ic1lF1&u@mZW8nBG04dybXnFWoD_@{DP!R~f)lR?}9{Q}Ww;wfTgWg`I{Ql!9Cs0=H&N#{ULgi_B z)9&~{X`E4Ds@cBzhY#R53#1JS4`h~Who*FOR@g%FxW~{81OYr_T7(#=fLH7A3B=@D zfN*iWkJl>qW+R;qRwgmfav)6n0LIzC89X1V08&?mkJoc>YX@5OmLGD8hzP8bzFr-V z+lt7TJa3K|lICrcuJpaERaF2{`wt~x&b*bLI1>B70#k9`tc(X zS!22DR3aCGont$|2skVMZRvlURezISppNSxCek_b=BV@6`B*3JriTp`|Ip;C5p$LIBO=H7va1={=tmqJw)uh;bdIW>wcP;^v{q+^MotnX20( zk{S-$mVa#uA=Z;4Q75|xzv*WBNIdIi$6EppB_NF9cf+tsJLyliz1I^rG_q~2#*};f zfew;@wDd3oWO*HVn8myhl>-YkZ2%E_R>)#QCtFpHdt*vj0NNN{M{jaN6;r@1njrF8N~b0M$@P z0V6M4*b9r^7$|j5KWd4#mgA5R3v%Y?m99%mMs6eq#Ntvy9#DDjIs7AIs`p>0YBZ{ZH9LXIFC#9hp>r)os<-SgfX5WL67OhVd#ckv`hl#FC#?@>rC{) z{o+2ZUtqVhy7HTDVz^Wx?tpQ3!n5l-&R9zvP=&BcF&u?;o!=^=Y;RvHU@L~0@M}kZ z-2|u!F5?ojau?)3r^qE_(eDXA3NQfD)5F&~5WvoEzh#)km*mV$Aw2+i2UG-6tfM8- zDan~z&l!bR+hy0R(x4!03*c97R z4p2>INmNQak@fSa1J0X6DHX>ofox34@z?U7&jf-# zI0yJ@M(;3SMDrj_(e4kKfiDKZANR3KCRHtGH-J(q%MJ_#i=?L4;hlJLv(EEHo27mr z`WzP5dJaxst_?0(8OHK1#suG-*(ZZ;u7@B-v2EE6l9H^fvVhd{33KfdUtWB&+fh4GY>*=yRcsPQ( zuTTJQ%M~-%)V1&jFG{17gb+n zxi@XM2buvrVTN7?v`uQ~%DVHM_Rx&s6yVp2-MpstD(99#W;$W542&wXkY-|<1e7IS zYdN3!dV2Ud4n_cK0|tgn0lLlpHaBF$_!zDb-LxKEA&)FEPE`WvGoFkc|tc2wPCc z?-AzjF(^tu8@P!hAaelN64>-8(+gf8VtV#}{qvZTELQs1iF2Qej~W~2Cdzm$a7`MD?_J}pux)MvUPyo0%h*j1P}>)}j#ecwd($BiM^42i@M}5UCZe2iHSGWw z8~_&^_et0sey;f)rI$}eYu#E5qG!T|+n&P_|l{?2VPUH6KyN0N*@1w&`0vz;SL2zOqt0Y?7Tb*R@`>RtTT z65~h{kJz^JtPGuTz&sn#e)irk}mo06@(hAm@9+ zuN3YN%U+^ke=UtaCX7Ke6iU}QCms_P#<`X_ZLnF@kiI)gUDu*yx`Zm(U?eDxPV{MF zn^-+Y-Sl0javD{g*WkK;6_DiT1Rk|U87weWRbT=6#1ZEGV=$FSc+0ql@`*&b|8PVn zM$1epvBVITh7gbrg;l*OmVZ##D0Nv1UiP?I!w_>l zZ?ttCjWEcAM$wFsTl}#^Dkfetw{Aw_%fzVlGblY_77q{c8V9!V3290u7g?*@D?1< zJ?$DUC6wi^txW?{Z@+N= zCAXZXI*=*YH_g>Bu>U}DJTupqg^%C!SQrq{(bn!vAz2$E>NVY4wsVvl&TULK! z6|=r~sX6Upj95qAcm%j+UuE%t1i*00_<+6(GjKwGyiFB~DZkE6&Nk!~R*9~G2hZW{ zu?8XRFwr7Qx18BWgn)^9AIY-P@n8EYpY=jT97ls~>7QyrKpEQz_N3Hu4sPqZaZHXKcU20(`$&m{xEoAhYqs8(ClzlG8IdA54B#7H3paO)A2*%9S@5*X8cc zbR|i$!u(ECgx+8QM2t5lNl{wf0G;n-G#wPHTS9PDAmoMc8u-RZr*6x2EZB2Nxfq8( z%f=0F`xlgl3Ig!-7g>~bXPR{~rLsP>W_$@>cYZwXL7L>#wo{Vhb^4Af=VO$_W3U~N za0+RtPGmOZ8q03zIiS=7vhbH9VJ*dBUxAsu>a@rO-^%Yu?2WvzzrZgyYbHCuo~~FA zYGV#%pkuZX35WPz^g8dQ!UJ!jdU;Qo?_l6{*!7i`lDJkmOvnVvIc|G0*cM5ezqVSv zpZ%>zX;L(`BXfAq`wQhjuftgyGg(tYvpjH<=Os;h4X#t^_5otpj>Sf#QaNRR=Ohz1 zDcevkH;J-+o4&YL5WU;9W9F_vh!h({wDYV6U0d<_K87J^dOt!vqRgCD% zXT0+3r^qee(aPwAfuHh|ViJbffB?}RfE7oDG?FySY<3)Bx_^~SdOyC@R(B1~fhEn) zG$AQ>mx8m4u*HL8aijEWUiFG3doysKII)r3VINn^o8?&{Osi^~56+3h^~ouhl73Z- zkPeE@`zad<+Jv)NDPT>O5J>j@_N##O`Xr4P|H>*>Pr$(#L?ry0Yx-6|&q|cHGo9#uG^^3#l2$ z4R&pZ{`l5}B-Hy(5ultlO%*4D-}NJql)5_JQi9?UrWcI5@8!L-F9!zJK5Ho8TYhAx z5vsC}YX*ppfj5@}=DiJ9ZWPA#BT77#oo69}Skmm?Bybeij^%3CB0yB&X8G0CYDo5Y zkC#eQ*&J!hI(z935dhNAQNl!Uxj2oE3KRqPX)V~J2`DS`>0~-3k5UtA=(@5?Tx#3C zx4gSV_x_@6NK#Bz7KbY>5?l@hnV8gpFbCLP8kZblt2Xv|i2(1Ov*^WByV{i}h7|^Guvg33Xf_;E}%|TM>kMotxZ7S#}M;tB$K*TtsG4qX9HLe*y z_qzf2uxK5s%Ns%WdLHMeES`g>H)c;`=1w!cWMtb%)%9Mb>Nk9!Cr1F#F}*ifqv>pX zpPV?-QSR)!s|G|Gz#$&`r$prH-{vOlKlR+b`UiA53WHead)qvgqn zE-$}+rdgu2IDoDpqawe5eIz2EMC0*cVygQ8&)*N@-#9q7cn}l;!)D literal 0 HcmV?d00001 diff --git a/docs/Application_guide/zh/media/system/time/time-ntp-proto.png b/docs/Application_guide/zh/media/system/time/time-ntp-proto.png new file mode 100644 index 0000000000000000000000000000000000000000..525cf8aac811928e3c14680cd5608391df3db8be GIT binary patch literal 5940 zcmcIoeO!`fzsI#{dopWlPgaWB_H6BBX~kBd0khTIR!^=MBn_o^kipPi)5wMwIfZVkOrXpm4_Y<$abb~11xv{OYx6e7}Ii2$da9uaQ>v#R` z-`n?lT}MCI5+>p^Y^`*#XBCH>6nN?l*w<-6gnTwCi&FqK>UO#j3 zqSCmiBXifk5mZ8ipY9L!7tUQj^Y+?6DlGDC_5uSevf;ssuB@;r_gKPvkIGG9V;BPF zJ}NCIi+gt5y_UuVv|Q;6r1^k*-wW({{NPU~tqZxLj{)%mr3Yyy+aBFfjVuO=&y0Hx zF+FM8Jvmi2C$_0|lT#ae-*W;a+ddZYW3;4iS%W&;UtQP%yLfL7+ty0o;dCl%57H$Q zGdk^`F+>Ezx`}&(m|IU33#2!ZwN4IQwE#J)+hD zmub#R(s?#ZarV%b0fzKYqqE%PWeI<>stC+)@|Z1+j2qRA9H;ocrAXML+X^eBKVD>? z9zob4%~boz{PZfOwU=p*Bu#C)N}p;eJI9R zNU}L}Ws{hB{;uO6yFVL!aXiT8l4z}Bq?7Sl;Arr}@ma=KhmqQ`B4Ixx*5=&2z!3f8 zNU(gI+KXyvMgn4_>+3qi)$qr^D~;9$Hjsor)zr!*!#WWn`wm{$7f+P-9Y+^{HdKJ^DxV z``e34T?=I%*3tesqaBvmFAKd{JoeV2p0p{;mz>p9{PG@IK_VcKFKK(0V~=IgcqT6O z0lHB})1p|ii85UdK(-cZ2=N$<1_>Zp?LDu6^4nXG9jnGYn%}eO-l4*( z^PC1vQoY@Q?PDylw}Gfc99TEsoR2Zzgjytg`he9!Zfz|^344X51SsXw&vq7%=3kiL zsgnp;Ge!L3B%dyR_Og3m)LBzxZ?emE@eI46*_J;vjs|v!(N$wY@>LLaL$eIHa*A=k zz_7F_Y_g8Xb(9xEL}MVkM=ujQe0@DAkDkW)-=i!Va8Am1-X-n5MR(stL#_fy0fL^A0kNgztiQi zR<(D56O~W`q`N7yx#}ZvU{aQnslX%_PtwvM)(8bkbx3Tfhl7 zM@~jcJufbB5lIc@U|SfFU-W%*vcB_Yjdjhf7tU}^*+pcjCpHw15fOO+rQBiE^1L7U z@-J(l0fo;}dajdxbT8y-`J%n2+5m zBFM5U26X+?USXarlYWr;jQ$!%UnLSZPbZ%DWhC=_+q04qh9sKK$b$3c`4acW81MT0 z=L-Y=Z_4{_5EXHcUURhE8;nL2MwWyk7NNTQzFGOJLF(VU%x!XxH{PmJurWKtk>wUY z9S~6(oHScP2) zGZq?#U*=vDgcJgrI=tsLkOUTT=2#R^ zQqXvkKYDnTKe~+_7u5D;T#%hyF(VfoMt|Rr*42D12os)afLiK6!SkNK~9}LZfIxKAzd*x$W`F^Lyrk9^p(~5J_ zc`3c;Xrh8tQm=?RyKYshq_(W_O(RO->2DJjv53(d5r8O`RS!o~5#w+9qY-bUSIl@T?eTz?A)CVU zt2s>L?IQMmCzxksquBU{cv~fVmi~tbP?K0PD8JRxf4J9^pXvgO)JVjeB{jQ5t2UJ7 zJlbD;XK#Ws{uLZWxJ1)!rmK=>!H8i9SHzh(1 zCh`PH48EUvIwTk5nb1{}+=)mEn!b*J8O{u(9?XQk1>Rn)p+@yII@mWc+ro1h`~e{@ ziFxHT4Ud$ZgcTv9C#z9KP2SB@UHH8i2S~(+-$+VQGrkaTqI)9oS(OSXQt-ZdmR<>) zKdLBpjOu59#s>rOo?Z;sBjUsQ$T;VroT)m&0YYiko(fuqTH!qqC5N~kKJiLFzfT$) z+h5CY(B=@FxMW3c&iH(Pbn|LPZ=?UaaK21!woyEC-2u9d!=e$)J<9wUd^vha-*IJ5Feyc1w=j9k$2dDg!FjKY&}{C?oL z3>S^N3^hnHAcjAAQeaOrxKN8@dN<=ek>$3@4I^MhC#wZS7C%4@o?BqJ!e10f`20p~ zfO3haH<0Qpcq`FYg9UHkC{0U->Q06WwDZga3ce^^6EgMy&BCyJ1)3t3*WN5ow%mkK zfLNNfyW%I6X&(}%eV?Xz!lG`C$s&X&3ijk^C@Hlm#(SzjY9BiF4vIXn*Hi61$-Q1+ z0fZdvm;B3|HRqttLR%7yb?@8Q#s@J&T#S$@PzjQPY)W{Gf#bzh;VKqt2Sj$(JM5~| zYHLc7gMx|8N^f?`$te$Of7U)ZsuSO$!G>h$snW`amNT|QyZV$KuIeS;IQ_IK^tswlK3LGs^AYCXSs;EEFj*i#ow3Y7!Ndt_V3 z(2S!J_a%)qlG`5Y!`{oia*$dL5j=Avqxs3GmqLpk$qWOXF)Fj!}Qs$y0*hmeu z%+tS;0!kBeWzaH0HI(9N!)K{ddUrK6I%Hr94yGbCjvJe> zF!>X<;WT7`uZ6J*(?g9KqNj^tLsc+XD4-N9NX=Yl*JMwvpbT3Bsb^L!!=M?hKM?-Z?)naQJT6EoivV+Zfum_YUfM_zVl`;o zb@yG|bx9>mnajaEM_!oubxkg`l>VBpe>ocqXh=zIoXT3C`e+)A$}J5OdyDBRxy=H1 zq(5{g6|6ro+O;kM&Lb6TyD<^0r|^kzbBbXKc&dJNDL!*&tst2|CZNX?VT_=)8OW+f zoduTiQPyG&7vv-!^`Q8YGXRDQjSz2o_=QASp#Zi+BV4Vx)(m4t?Lfs{V=3Na(lxP+ z;Vb(?#zep_$Yyb*!pvXH5A}t}}`1r@$g68f}_$d?+HeK4mUN0NV#cKO|# z@hf)tFZG`%!rC9%IOab%-h_El&=xDh?V8WH&!Uf?0FJ=rO=AoM$Sdtr?=cfgLUkPx zpd)?8K12D`4OWxNwN-&>l5kGs)Sm#GSWqISGAY5AI75GyI53N`cBhW25f=;64mOhs z{S9;=mai-PlLj;oj@mi#JwP&^MiP(-;nYk4mXW^NoKo8ihs0{?;H<7!B{y*S+|a@q zk7Wtb-n#jng%&PVEjfu3u`qB)B!CSX8SPakFq(}VQ?sNoH)#@p?icKN11pBJ8T@LwJ` zp5(~?-(VUBS4qEeVhU7AI4B?I5|i>B2_6^l1shTUpV3!zeU#bub$C7+#Na%iPF)%k z)lB|`(^tBCrLL5F>Og98NVLJ!*(OI$ok$lnWqlzahMPHIv{%B-!X-nr<(kH!_~nl4 z$vf0HSQPtC0(2(CwUZ59PqrO}hze+6Q4GqrLj^Z@EUL;ZYn9^xyv^i|hfhF#yNqQZ zXGve}RwIW-^Bh0}WV!ZYE57M`-;ezlNX4?B{i<|Y#f!nQRU8jQ-YPu_ZH z`o{dmg4x-&>k$F(`=cN2u9&f%;GbGGxc>{0nJZe1 k@jtj^&UBkeQ?t)ozWux9qX{&8(~Wp< QuecPython 支持多种型号模组,不同模组 RTC 时间精度有所差异,对于时间精度要求较高的,可以根据各芯片硬件手册进行选择。 +> QuecPython 模组 RTC 时间配置以及 ALARM 配置会擦写 FLASH,不宜频繁调用。 + +**RTC 时间获取及配置** + +通过下面接口可以获取 RTC 时间以及根据需要配置 RTC 时间满足使用需求。 + +```python +from machine import RTC + +# 初始化 RTC 实时时钟 +rtc = RTC() + +# 设置 RTC 时间 +rtc.datetime([2026, 3, 12, 1, 12, 12, 12, 0]) + +# 获取 RTC 时间 +rtc_time = rtc.datetime() + +# 打印 RTC 时间 +print(rtc_time) + +``` + +**RTC ALARM** + +闹钟是被设计成会在特定的时间向人发出讯号的时钟,用来提醒其它事务。 + +在 QuecPython 中,闹钟被设计用于设置 RTC 到期时间,时间到期就会调用注册的回调函数。该方式也可以用于低功耗唤醒,在低功耗状态下,通过 RTC 进行唤醒工作。 +> EC600U 系列 / EC200U系列 / EC600M系列 / EC800M系列 支持自动开机,即设置 ALARM 功能之后将模块关机,ALARM 时间到了之后可以自动开机。其他平台不支持该特性。 + +```python + +from machine import RTC + +# 初始化 RTC 实时时钟 +rtc = RTC() + +# 定义唤醒回调函数接口,唤醒后执行该函数。 +def callback(args): + print('RTC alarm') + +# 注册唤醒回调函数。 +rtc.register_callback(callback) + +# 设置闹钟,在某个时间唤醒。 +rtc.set_alarm([2026, 7, 9, 5, 12, 30, 0, 0]) + +# 使能该闹钟。 +rtc.enable_alarm(1) +``` + +### utime + +时间是一种尺度,在物理定义是标量,借着时间,事件发生之先后可以按过去-现在-未来之序列得以确定(时间点/时刻),也可以衡量事件持续的期间以及事件之间和间隔长短(时间段)。 + +QuecPython 下 utime 模块提供获取当前时间和日期(UTC 时间)、测量时间间隔和延迟的函数。utime 是软件层面的时间。对于 utime 的所有用法参见标准库 [utime - 时间相关功能]() 章节。 + +#### System Tick + +系统节拍通常是指 CPU 时钟,是操作系统的心脏,维持着整个系统运行的稳定性。操作系统要实现时间上的管理,必须依赖于系统节拍。 + +系统节拍是从开机开始一个不断递增的计数器,其时间精度取决于硬件平台底层的时钟。 + +##### 原理 + +系统节拍一般由晶振产生,以精确和固定的时间间隔,触发电信号,通过电信号翻转产生一个 tick,设备处理一次数据。比如晶振 12MHZ = 12 × 10 的 6 次方,即每秒发出 12000000 个脉冲信号,那么发出一个脉冲的时间就是时钟周期,也就是 1/12 微秒。通常也叫做系统时钟周期,是计算机中最基本的、最小的时间单位。 + +![](../media/system/time/time-clock-signal.png) + +##### 应用 + +System tick 是系统中最小的时间刻度,因此可以基于此项接口实现高精度时间管理。 +> 注:由于 python 的运行机制,在 python 层无法进行高精度的实现。 + +**系统定时器** + +基于 tick 封装 python 实现系统定时器。 + +```python +from machine import Timer + +# timer 到时回调函数。 +def timer_callback(t): + print('timeout occured !') + +# 创建定时器对象。 +t = Timer(Timer.Timer1) + +# 启动定时器,周期性 1s 执行定时器回调。 +t.start(period=1000, mode=t.PERIODIC, callback=timer_callback) +``` + +**时间差** + +通过utime.tick接口可以通过时间差确认代码执行效率。 + +```python +import utime + +# 开始执行 print 时间 +start = utime.ticks_us() + +# 执行print打印语句 +print('Hello QuecPython !') + +# 结束执行 print 时间 +end = utime.ticks_us() + +# 计算时间差,单位us +utime.ticks_diff(end, start) + +``` + +#### UTC 时间 + +UTC 时间(Universal Time Coordinated, 世界标准时间或世界协调时间),以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。 + +全球统一时间,但是由于地球旋转导致不同地域的人看到的日出日落的时间不同,全球同一时间显然不符合各地的作息,因此根据地球的地理位置,人为将地球划分成24个不同的时区。因此在 UTC 的基础上各地区形成本地时间。 + +本地时间 = UTC 时间 + 时区差,比如北京时区是东八区,领先 UTC 8 个小时,此时如果想获取北京时间,需要将时区配置到东区即可。 + +QuecPython 提供了本地时间接口以及时区配置接口,系统默认配置在东八区,如果您处在不同的时区,可以根据自己的需求,配置到您所处位置的时区。 + +```python +import utime + +# 配置东八区时区。此处配置可能与 NTP 时间同步里面时区配置产生错乱,我们建议使用 ntptime 配置时区。 +utime.setTimeZone(8) + +# 获取本地 UTC 时间。 +utime.localtime() + +``` + +### 时间同步 + +所谓时间同步,即要求各点之间的绝对时间相同。在我们生活中可能会遇到,钟表长时间运行后,需要手动对表,防止时间偏差太大。那么长时间设备运行为什么时间会有偏差?在连网设备上是如何进行对时操作呢?在一些场景对各设备间时间一致性要求较高如何处理? + +带有时间的设备,都是靠本地时钟源进行控制时间走时,长时间运行时,会受到本身精度或者环境的影响,出现偏差,此时对于时间要求较高的场景下,就需要对设备时间进行同步,保证运行的稳定性,常用的方式通过 NTP 向标准时间服务器进行时间同步(如全球 NTP 授时服务器,pool.ntp.org),或者向自己设计的时间服务器进行时间同步。 + +QuecPython 提供 NITZ、NTP 时间同步协议,方便客户进行时间同步操作。 + +#### 基站时间同步 + +NITZ(Network Identity and Time Zone,网络标识和时区),是一种用于自动配置本地的时间和日期的机制,需要运营商支持。对于蜂窝无线设备,在接入到运营商网络后,运营商网络向移动设备提供本地日期, 时间, 时区, 夏令时偏移等信息。 + +> 该时间可能与标准时间偏差较大。 +> NITZ 未对外提供接口,只是内部同步时间机制,会在开机启动时进行时间同步。 + +#### NTP 时间同步 + +NTP(Network Time Protocol, 网络时间协议),是由 RFC 1305 定义的时间同步协议,用来在分布式时间服务器和客户端之间进行时间同步,NTP 基于 UDP 报文进行传输,使用 UDP 端口号为 123。 + +报文格式如下图所示,我们可以根据协议的报文内容,通过上报时间与服务器的时间比较,以及链路传输时间计算,校准当前设备与服务器时间保持一致。QuecPython 设备对于 NTP 的所有用法参见 [ntptime - 网络时间同步]() 章节。 + +![](../media/system/time/time-ntp-proto.png) + +## API 说明 + +### 时间同步 + +对于需要时间信息,但是当前时间与标准时间不一致,或者与自己服务器时间不一致的情况下,可以使用 NTP 进行校时。 +> 需要注意,对于需要校时的设备,需要考虑在使用的时间会不会因为校时导致本机时间变化而引起程序逻辑混乱。 + +```python +import ntptime + +# 设置 ntp 服务器地址,pool.ntp.org是全球 NTP 授时服务器。 +ntptime.sethost('pool.ntp.org') + +# 同步 ntp 服务时间 +ntptime.settime() + +``` + +### 获取 UTC 时间 + +QuecPython 系统中,utime时间标准是按照 UTC 时间标准使用的。直接获取本地时间即可。默认表示东八区时间,需要根据需要自己调整时区。 + +```python +import utime + +# 获取本地 UTC 时间。 +utime.localtime() + +``` + +### 获取 RTC 时间 + +RTC 获取年月日、时分秒时间格式,最小精度ms级别。 + +```python +from machine import RTC +# 创建 RTC 对象。 +rtc = RTC() + +# 获取 RTC 时间。 +rtc.datetime() + +``` + +### 获取时间差 + +根据平台不同,通过 tick 进行计算,时间差可以获取到 us 级别。 +> 时间差请使用接口 utime.ticks_diff 计算,tick 在最大值后会进行重新计数,易造成问题。 + +```python +# 计算执行 print 语句的时间差。 +import utime + +# 开始执行 print 时间 +start = utime.ticks_us() + +# 执行print打印语句 +print('Hello QuecPython !') + +# 结束执行 print 时间 +end = utime.ticks_us() + +# 计算时间差,单位us +utime.ticks_diff(end, start) + +``` + +### 时区同步 + +QuecPython 模组默认使用东八区 UTC 时间, 对于不同的地区,可以根据时区配置调整为自己本地时间。 + +```python +import utime + +# 配置东八区时区。此处配置可能与 NTP 时间同步里面时区配置产生错乱,我们建议使用 ntptime 配置时区。 +utime.setTimeZone(8) + +# 获取本地 UTC 时间。 +utime.localtime() + +``` + +### 休眠 + +QuecPython 提供秒级、毫秒级、微妙级休眠接口,可以根据使用需求进行调用。 +> 注: 实际使用中休眠时间不是一个精准时间。 + +```python +import utime + +# 设置休眠 1s。 +utime.sleep(1) +utime.sleep_ms(1000) +utime.sleep_us(1000*1000) +``` + +### 系统定时器(Timer) + +系统定时器用于定时或者周期性执行某任务,该定时器基于硬件定时器功能实现,一般最多可以创建4个定时器。QuecPython 设备对于系统定时器的所有用法参见 [class Timer - 硬件定时器]() 章节。 + +```python +from machine import Timer + +# timer 到时回调函数。 +def timer_callback(t): + print('timeout occured !') + +# 创建定时器对象。 +t = Timer(Timer.Timer1) + +# 启动定时器,周期性 1s 执行定时器回调。 +t.start(period=1000, mode=t.PERIODIC, callback=timer_callback) +``` + +### RTC 闹钟 + +用于时间到期执行指定任务,该功能实现还可用于低功耗下休眠唤醒,以及关机下进行开机唤醒。 + +```python +from machine import RTC + +# 初始化 RTC 实时时钟 +rtc = RTC() + +# 定义唤醒回调函数接口,唤醒后执行该函数。 +def callback(args): + print('RTC alarm') + +# 注册唤醒回调函数。 +rtc.register_callback(callback) + +# 设置闹钟,在某个时间唤醒。 +rtc.set_alarm([2026, 7, 9, 5, 12, 30, 0, 0]) + +# 使能该闹钟。 +rtc.enable_alarm(1) +``` + +## 常见问题 + +### 模组关机(不断电),RTC 是否还在运行? + +在模块上电后,无论模块状态如何(运行模式、低功耗模式、处于复位状态或者关机状态),只要电源电压保持在工作范围内,RTC 不会停止工作,之前的时间就不会丢失。EC200A系列无法模组关机运行。 + +### 模组断电,时间从哪同步? + +模组断电后,电路无法正常工作,此时时间会丢失,重新上电后,连接网络,模组会通过使用 NITZ 方式与基站进行时间同步。用户也可以通过 NTP 自定义服务器进行时间同步。 -- Gitee From d360ee004a868a12987b530b0e60b93fd372c943 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kunming=20Wang=28=E7=8E=8B=E5=9D=A4=E6=98=8E=29?= Date: Thu, 3 Aug 2023 09:42:34 +0800 Subject: [PATCH 2/3] =?UTF-8?q?docs=20(time):=20=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=90=8D=E7=A7=B0=E4=BF=AE=E6=94=B9=E5=90=8C?= =?UTF-8?q?=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 固件版本: N/A 是否需要文案翻译: 否 --- .../media/system/time/time-clock-signal.png | Bin 7607 -> 0 bytes .../media/system/time/time-introduction.png | Bin 19921 -> 0 bytes .../zh/media/system/time/time-ntp-proto.png | Bin 5940 -> 0 bytes docs/Application_guide/zh/system/time.md | 325 ------------------ 4 files changed, 325 deletions(-) delete mode 100644 docs/Application_guide/zh/media/system/time/time-clock-signal.png delete mode 100644 docs/Application_guide/zh/media/system/time/time-introduction.png delete mode 100644 docs/Application_guide/zh/media/system/time/time-ntp-proto.png delete mode 100644 docs/Application_guide/zh/system/time.md diff --git a/docs/Application_guide/zh/media/system/time/time-clock-signal.png b/docs/Application_guide/zh/media/system/time/time-clock-signal.png deleted file mode 100644 index 74a01375429c6c728e22a73824bfa0baa7270232..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7607 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 CfpFUZ diff --git a/docs/Application_guide/zh/media/system/time/time-introduction.png b/docs/Application_guide/zh/media/system/time/time-introduction.png deleted file mode 100644 index 7e36b0302f9e582c342185ab0f91b0e7d4a14405..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19921 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

@S8!sMHMwF4NR1xG7;KnhScM0e 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 diff --git a/docs/Application_guide/zh/media/system/time/time-ntp-proto.png b/docs/Application_guide/zh/media/system/time/time-ntp-proto.png deleted file mode 100644 index 525cf8aac811928e3c14680cd5608391df3db8be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5940 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 k@jtj^&UBkeQ?t)ozWux9qX{&8(~Wp< QuecPython 支持多种型号模组,不同模组 RTC 时间精度有所差异,对于时间精度要求较高的,可以根据各芯片硬件手册进行选择。 -> QuecPython 模组 RTC 时间配置以及 ALARM 配置会擦写 FLASH,不宜频繁调用。 - -**RTC 时间获取及配置** - -通过下面接口可以获取 RTC 时间以及根据需要配置 RTC 时间满足使用需求。 - -```python -from machine import RTC - -# 初始化 RTC 实时时钟 -rtc = RTC() - -# 设置 RTC 时间 -rtc.datetime([2026, 3, 12, 1, 12, 12, 12, 0]) - -# 获取 RTC 时间 -rtc_time = rtc.datetime() - -# 打印 RTC 时间 -print(rtc_time) - -``` - -**RTC ALARM** - -闹钟是被设计成会在特定的时间向人发出讯号的时钟,用来提醒其它事务。 - -在 QuecPython 中,闹钟被设计用于设置 RTC 到期时间,时间到期就会调用注册的回调函数。该方式也可以用于低功耗唤醒,在低功耗状态下,通过 RTC 进行唤醒工作。 -> EC600U 系列 / EC200U系列 / EC600M系列 / EC800M系列 支持自动开机,即设置 ALARM 功能之后将模块关机,ALARM 时间到了之后可以自动开机。其他平台不支持该特性。 - -```python - -from machine import RTC - -# 初始化 RTC 实时时钟 -rtc = RTC() - -# 定义唤醒回调函数接口,唤醒后执行该函数。 -def callback(args): - print('RTC alarm') - -# 注册唤醒回调函数。 -rtc.register_callback(callback) - -# 设置闹钟,在某个时间唤醒。 -rtc.set_alarm([2026, 7, 9, 5, 12, 30, 0, 0]) - -# 使能该闹钟。 -rtc.enable_alarm(1) -``` - -### utime - -时间是一种尺度,在物理定义是标量,借着时间,事件发生之先后可以按过去-现在-未来之序列得以确定(时间点/时刻),也可以衡量事件持续的期间以及事件之间和间隔长短(时间段)。 - -QuecPython 下 utime 模块提供获取当前时间和日期(UTC 时间)、测量时间间隔和延迟的函数。utime 是软件层面的时间。对于 utime 的所有用法参见标准库 [utime - 时间相关功能]() 章节。 - -#### System Tick - -系统节拍通常是指 CPU 时钟,是操作系统的心脏,维持着整个系统运行的稳定性。操作系统要实现时间上的管理,必须依赖于系统节拍。 - -系统节拍是从开机开始一个不断递增的计数器,其时间精度取决于硬件平台底层的时钟。 - -##### 原理 - -系统节拍一般由晶振产生,以精确和固定的时间间隔,触发电信号,通过电信号翻转产生一个 tick,设备处理一次数据。比如晶振 12MHZ = 12 × 10 的 6 次方,即每秒发出 12000000 个脉冲信号,那么发出一个脉冲的时间就是时钟周期,也就是 1/12 微秒。通常也叫做系统时钟周期,是计算机中最基本的、最小的时间单位。 - -![](../media/system/time/time-clock-signal.png) - -##### 应用 - -System tick 是系统中最小的时间刻度,因此可以基于此项接口实现高精度时间管理。 -> 注:由于 python 的运行机制,在 python 层无法进行高精度的实现。 - -**系统定时器** - -基于 tick 封装 python 实现系统定时器。 - -```python -from machine import Timer - -# timer 到时回调函数。 -def timer_callback(t): - print('timeout occured !') - -# 创建定时器对象。 -t = Timer(Timer.Timer1) - -# 启动定时器,周期性 1s 执行定时器回调。 -t.start(period=1000, mode=t.PERIODIC, callback=timer_callback) -``` - -**时间差** - -通过utime.tick接口可以通过时间差确认代码执行效率。 - -```python -import utime - -# 开始执行 print 时间 -start = utime.ticks_us() - -# 执行print打印语句 -print('Hello QuecPython !') - -# 结束执行 print 时间 -end = utime.ticks_us() - -# 计算时间差,单位us -utime.ticks_diff(end, start) - -``` - -#### UTC 时间 - -UTC 时间(Universal Time Coordinated, 世界标准时间或世界协调时间),以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。 - -全球统一时间,但是由于地球旋转导致不同地域的人看到的日出日落的时间不同,全球同一时间显然不符合各地的作息,因此根据地球的地理位置,人为将地球划分成24个不同的时区。因此在 UTC 的基础上各地区形成本地时间。 - -本地时间 = UTC 时间 + 时区差,比如北京时区是东八区,领先 UTC 8 个小时,此时如果想获取北京时间,需要将时区配置到东区即可。 - -QuecPython 提供了本地时间接口以及时区配置接口,系统默认配置在东八区,如果您处在不同的时区,可以根据自己的需求,配置到您所处位置的时区。 - -```python -import utime - -# 配置东八区时区。此处配置可能与 NTP 时间同步里面时区配置产生错乱,我们建议使用 ntptime 配置时区。 -utime.setTimeZone(8) - -# 获取本地 UTC 时间。 -utime.localtime() - -``` - -### 时间同步 - -所谓时间同步,即要求各点之间的绝对时间相同。在我们生活中可能会遇到,钟表长时间运行后,需要手动对表,防止时间偏差太大。那么长时间设备运行为什么时间会有偏差?在连网设备上是如何进行对时操作呢?在一些场景对各设备间时间一致性要求较高如何处理? - -带有时间的设备,都是靠本地时钟源进行控制时间走时,长时间运行时,会受到本身精度或者环境的影响,出现偏差,此时对于时间要求较高的场景下,就需要对设备时间进行同步,保证运行的稳定性,常用的方式通过 NTP 向标准时间服务器进行时间同步(如全球 NTP 授时服务器,pool.ntp.org),或者向自己设计的时间服务器进行时间同步。 - -QuecPython 提供 NITZ、NTP 时间同步协议,方便客户进行时间同步操作。 - -#### 基站时间同步 - -NITZ(Network Identity and Time Zone,网络标识和时区),是一种用于自动配置本地的时间和日期的机制,需要运营商支持。对于蜂窝无线设备,在接入到运营商网络后,运营商网络向移动设备提供本地日期, 时间, 时区, 夏令时偏移等信息。 - -> 该时间可能与标准时间偏差较大。 -> NITZ 未对外提供接口,只是内部同步时间机制,会在开机启动时进行时间同步。 - -#### NTP 时间同步 - -NTP(Network Time Protocol, 网络时间协议),是由 RFC 1305 定义的时间同步协议,用来在分布式时间服务器和客户端之间进行时间同步,NTP 基于 UDP 报文进行传输,使用 UDP 端口号为 123。 - -报文格式如下图所示,我们可以根据协议的报文内容,通过上报时间与服务器的时间比较,以及链路传输时间计算,校准当前设备与服务器时间保持一致。QuecPython 设备对于 NTP 的所有用法参见 [ntptime - 网络时间同步]() 章节。 - -![](../media/system/time/time-ntp-proto.png) - -## API 说明 - -### 时间同步 - -对于需要时间信息,但是当前时间与标准时间不一致,或者与自己服务器时间不一致的情况下,可以使用 NTP 进行校时。 -> 需要注意,对于需要校时的设备,需要考虑在使用的时间会不会因为校时导致本机时间变化而引起程序逻辑混乱。 - -```python -import ntptime - -# 设置 ntp 服务器地址,pool.ntp.org是全球 NTP 授时服务器。 -ntptime.sethost('pool.ntp.org') - -# 同步 ntp 服务时间 -ntptime.settime() - -``` - -### 获取 UTC 时间 - -QuecPython 系统中,utime时间标准是按照 UTC 时间标准使用的。直接获取本地时间即可。默认表示东八区时间,需要根据需要自己调整时区。 - -```python -import utime - -# 获取本地 UTC 时间。 -utime.localtime() - -``` - -### 获取 RTC 时间 - -RTC 获取年月日、时分秒时间格式,最小精度ms级别。 - -```python -from machine import RTC -# 创建 RTC 对象。 -rtc = RTC() - -# 获取 RTC 时间。 -rtc.datetime() - -``` - -### 获取时间差 - -根据平台不同,通过 tick 进行计算,时间差可以获取到 us 级别。 -> 时间差请使用接口 utime.ticks_diff 计算,tick 在最大值后会进行重新计数,易造成问题。 - -```python -# 计算执行 print 语句的时间差。 -import utime - -# 开始执行 print 时间 -start = utime.ticks_us() - -# 执行print打印语句 -print('Hello QuecPython !') - -# 结束执行 print 时间 -end = utime.ticks_us() - -# 计算时间差,单位us -utime.ticks_diff(end, start) - -``` - -### 时区同步 - -QuecPython 模组默认使用东八区 UTC 时间, 对于不同的地区,可以根据时区配置调整为自己本地时间。 - -```python -import utime - -# 配置东八区时区。此处配置可能与 NTP 时间同步里面时区配置产生错乱,我们建议使用 ntptime 配置时区。 -utime.setTimeZone(8) - -# 获取本地 UTC 时间。 -utime.localtime() - -``` - -### 休眠 - -QuecPython 提供秒级、毫秒级、微妙级休眠接口,可以根据使用需求进行调用。 -> 注: 实际使用中休眠时间不是一个精准时间。 - -```python -import utime - -# 设置休眠 1s。 -utime.sleep(1) -utime.sleep_ms(1000) -utime.sleep_us(1000*1000) -``` - -### 系统定时器(Timer) - -系统定时器用于定时或者周期性执行某任务,该定时器基于硬件定时器功能实现,一般最多可以创建4个定时器。QuecPython 设备对于系统定时器的所有用法参见 [class Timer - 硬件定时器]() 章节。 - -```python -from machine import Timer - -# timer 到时回调函数。 -def timer_callback(t): - print('timeout occured !') - -# 创建定时器对象。 -t = Timer(Timer.Timer1) - -# 启动定时器,周期性 1s 执行定时器回调。 -t.start(period=1000, mode=t.PERIODIC, callback=timer_callback) -``` - -### RTC 闹钟 - -用于时间到期执行指定任务,该功能实现还可用于低功耗下休眠唤醒,以及关机下进行开机唤醒。 - -```python -from machine import RTC - -# 初始化 RTC 实时时钟 -rtc = RTC() - -# 定义唤醒回调函数接口,唤醒后执行该函数。 -def callback(args): - print('RTC alarm') - -# 注册唤醒回调函数。 -rtc.register_callback(callback) - -# 设置闹钟,在某个时间唤醒。 -rtc.set_alarm([2026, 7, 9, 5, 12, 30, 0, 0]) - -# 使能该闹钟。 -rtc.enable_alarm(1) -``` - -## 常见问题 - -### 模组关机(不断电),RTC 是否还在运行? - -在模块上电后,无论模块状态如何(运行模式、低功耗模式、处于复位状态或者关机状态),只要电源电压保持在工作范围内,RTC 不会停止工作,之前的时间就不会丢失。EC200A系列无法模组关机运行。 - -### 模组断电,时间从哪同步? - -模组断电后,电路无法正常工作,此时时间会丢失,重新上电后,连接网络,模组会通过使用 NITZ 方式与基站进行时间同步。用户也可以通过 NTP 自定义服务器进行时间同步。 -- Gitee From 645928b28dee50b6794ccac195dcdf118f6e095c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kunming=20Wang=28=E7=8E=8B=E5=9D=A4=E6=98=8E=29?= Date: Wed, 23 Aug 2023 11:30:50 +0800 Subject: [PATCH 3/3] =?UTF-8?q?docs=20(=E5=A4=9A=E7=BA=BF=E7=A8=8B):=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=A4=9A=E7=BA=BF=E7=A8=8B=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E6=8C=87=E5=AF=BC=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 固件版本: N/A 是否需要文案翻译: 是/否 --- .../system/thread/thread_life_status.png | Bin 0 -> 12879 bytes .../thread/thread_multi_preemptive_work.png | Bin 0 -> 7736 bytes .../thread/thread_multi_priority_work.png | Bin 0 -> 6995 bytes .../thread/thread_multi_python_gil_work.png | Bin 0 -> 12483 bytes .../system/thread/thread_multi_time_work.png | Bin 0 -> 10624 bytes .../thread/thread_single_multi_compare.png | Bin 0 -> 9268 bytes docs/Application_guide/zh/system/thread.md | 782 ++++++++++++++++++ 7 files changed, 782 insertions(+) create mode 100644 docs/Application_guide/zh/media/system/thread/thread_life_status.png create mode 100644 docs/Application_guide/zh/media/system/thread/thread_multi_preemptive_work.png create mode 100644 docs/Application_guide/zh/media/system/thread/thread_multi_priority_work.png create mode 100644 docs/Application_guide/zh/media/system/thread/thread_multi_python_gil_work.png create mode 100644 docs/Application_guide/zh/media/system/thread/thread_multi_time_work.png create mode 100644 docs/Application_guide/zh/media/system/thread/thread_single_multi_compare.png create mode 100644 docs/Application_guide/zh/system/thread.md diff --git a/docs/Application_guide/zh/media/system/thread/thread_life_status.png b/docs/Application_guide/zh/media/system/thread/thread_life_status.png new file mode 100644 index 0000000000000000000000000000000000000000..c03e67884dce5a29a74c26cce34e3fbad94ff56c GIT binary patch literal 12879 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 Wp_bxz0yqc*{ov&4SY>}P;lBaTzc~#6 literal 0 HcmV?d00001 diff --git a/docs/Application_guide/zh/media/system/thread/thread_multi_python_gil_work.png b/docs/Application_guide/zh/media/system/thread/thread_multi_python_gil_work.png new file mode 100644 index 0000000000000000000000000000000000000000..b277797990ab3f52214871743f7377b53eec727c GIT binary patch literal 12483 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 literal 0 HcmV?d00001 diff --git a/docs/Application_guide/zh/media/system/thread/thread_multi_time_work.png b/docs/Application_guide/zh/media/system/thread/thread_multi_time_work.png new file mode 100644 index 0000000000000000000000000000000000000000..9e966bdc67e89f16fe49a40412df44cca24736fe GIT binary patch literal 10624 zcmdU#dpy(q`}ik{L^?U-Sa+Z3Asym7p zH*=W7Lbgf{QMSx1B(crRVPi9XuT6D-?(gIK`~C6#{qy_%;qmr<@BMxquGe+FuIF{V zuH-YPZIu-@6(JCa@`-={d=3Ix!G}O(R1{W$Cp&Ln4FDIJE9Y#FKuSBb$H0x;MH_n? z2&6n?&4TwzaKAeE->z36khLw6KN(8U(_g`NswaN7af*O*7~&ug>U}0}asQe8Xhi_2N$=i2o-Rtgf!`b zi=RxK6}WV*`2X_5s|J_Hx}Ow5Ad&0YYix#(^m>!RVMh(GfROs>L0aKfAe#pY_`9@iY}!x+^8C8xhTerv4+UvM z5GK-l0_F8>9U!R6jSZ&CO}c&x297&ggJPz0iV#U<$duvxDw5}o>rCMg`>iwoXo^r> zQ*&N5o5Br;pVEf-DGu9d#^JU`_|Ucm^m!jpe&T(qx|P?F^lfOHvA5$k?#5o%ao6TX zn?E~ww9Hs8O+AqOB2WDxMVB;PWj>&x_HAN&FC;O8Abti>mo($7y4E!p==k=W(QHmP zOb>_6ben<&eX(&+wwb*?3``ZeM}eP^&wJE<*S;-PG2!f|S;Pf&10_?aM~P7t&-QN~@&zeDiyM9W9f;8ulow z00>ig@K?nrpRUL)cRT%1@=!gFye5C=b=`lo!&g&RFFrCoC+P)E-&d7(i2(p|MpGDK+;$ULA$pow}PAL)3~yls|O>3C0j3Mm9~wdt_ro~mo$7zXUH z>$G$+^0(%mdblY%{i?Lv4ZQ&B-i`E;IPG4@n+SL!NptNAkAiANxnT(o0?#H`fCHm&QFIQ;y-~Vq9m=# zRIaGF#2<;b(p%@7ku2+O(ObXE&+C-#pW7sBl5zlfz|dhm`|JjN6?O_DFMWBr(`%*e z*{g5gN~33y@AA@a&2-DjVe_}jVcktVML*F-TjqT1C{bbP2T*d20)GrFirY0rkQa=0 zrJ>p?uE8)4_rPari_SMius3sIYU4C$ zJ>!DZ?oJm3ybI;D$zx$FKj?0huL^xWFN+g(YqZEaJ&~$@O4T+nFctpwQ`l45wC?gR zh8RwY%gP?r~)9Wb_G>bxn(lV$no%!kUTR68HO9wr5>f zyJur`?UmvI4!xSOuu$(_;cM?4^)`x~IniG`ta~V;tCkRD3YQGFJlozfY&xj_C7V5^ zv97mjqXA>g3wN$0{4;6M8I!k|CU|Hu8MMTh3Ud_kYd7lQJQ(;`jAegEY^P@|k35A7 z8550*L^yw3pi4E{I^|CfIxh+bpcyprsx%-#brqMB&OwbXZE!U0T1NgmLX ztOOcz=tX8aVYWCfO1D$n$_@KRDb&ZG+vs20yC!QEo62KdAHK&gq4NY2;ZP*d8Rom) zG*(FKLzwzX(PV05K)~CEsW-bPgtM%P2}a$0LgNjfXcgJ^Yl_{=Tpss`8+nQLt}Nk& z!2^xW1uSZb<-tipc0vEI^9YAmm6X(m5^ZGa112M`ft=71JD*n!{V94;fK7F6x3E{k zD;Dfi;VZuOHgV2hTA1!EjKkhUOHIpC%TP z)d%qU#rj{hd^~$Nz5i+{D8`KQ^)h>Vgngyx$R3F$KKD{(tFbZk&iAP3)s*Cz45$#! zlS{a8DRs~@q+98ID$aa&=@w2)jn{;1!`vBeOFfC>uxbXsWC3>(Br)xl#=|@#1WY;? zMM&4Ntnx5!obz!uZkRdeOv%v0kB?+|!Amz9oUXZL;9x|3=2%$td#S~hFK;hffvFQ7 z!b&l$UT1IHrO{59==taw?9hwe#7;G{s zc6X>2ZD!-1iulze&pRt>$7@F)xR*Xw$xF3O*LE#!Nm6lna%ED#YN`{{VaYho>ZFMRl~(*vc+Zr^ID9ta%n;69`H0wsZK$iiEDsu zIknPKYSg;dQSAK#e*LQ{tI}k6=3RJb0Xny0kG@K`GJ8KC(**M+cc{@{0^~kd=FKpO+cM;fN2{@`(;@KD-MD9|h~K5}7|0jbJMEI1ZwA zPRLS3rqrDoPy*bvi&_#lG73acj!mh`imN%{_SFC_JkWD(1gVC`#Nwln#hQ{Ho#I60{Hl7tPi+?XvHEcsrPeVx&|Ydk|$-p6Aed!FL8iddzM{E z3G-YQaH|w4VNeH#hJ2j;bOEW{0HApNwJdNm`v@1(dD~@{X%2MY4SXbU%qmEtp$GJas=4qBd7_`nYqYnXO~^l=_%1bu+XKlMckCak`Jg@ojU z+SgiJTRRNTBZgk6Q7rW&6fVJINcNGh<+c*oB$q9tq=UgZur8kjmd5tlPa*ltyLV4X zv7V~y-2*1NL)n}1y#X*qU-ntW)6c)rv$xOQ<*=f1vurFJ0Q5o!{YQ`@4N782GWqwv zJ^?&@_-IupHyAm*5zXqsK21bTR}~fun^c$++PHkirqI)|qjiK%`J$!$gh-TgDwKb> z1^~Cb=3gkLO?6lc%#6TMx^Tv#msRL%X{(nxBjde`cD8FXv+O36{IoYM@G|Q70TVLf z(=xRbB1qm}whPATq$irCM=6Wl_MMG~d)lw_wyOZC_Em|z{(jetaEY9D`t64U3Pq&- z6|=u-<=lNT_GpJ3mJZO&CT4jQo7mM<@WPVBQEdv<*Gq@WVRM9E7OVRc$Hb}7&Fdt5 z2;!3*Uw1iC^xW_Ptn~YD@fyLlta>*HOX_tzbyJ~Lt)FEQzga{S<;KnOvA$I{v(-S) z);A4QDexmrp!Xz!;IF>)wbhHy8VJg9MA10ap77F?9{2{*aemG z(Nr?lmeg#kl{)siCS=;Cpl2z|*iRkk@32Bg_dM*=2YvWf>0UTsxJ`fU6k_T{)!jp{ z;(6O8D|iUXcBaxYPD_Q*3c``cJda!QV2TzYi`@RV=~uuMzmG~}Ug zs38x4_m5uM6dK{8T{pyym;!3m{z6WKqL$XSWf_N~Ki1(yRhF3X+adrdmV)RL0v(Ic zS0%0$zO_akHJ>J!B&KUi$9>E2{&;y6i)xcsdwhG~3mvhsp9OoLTgCFxgbsnxqO}=` z72qti7@*XeE#m2>)9k6RB>0>|TiXn#{yx9XdpOrpJi3IMhk3bKM=R~JB1bgn-vIM8 z@+3N`vUhwv?}5aR);{3!rrlK2m7^xYwbU0hK37j8Z=D>DC+nphU4&VuzfaS_AmQe| z`D2PKz3BuZml%x zgW0yv{%G%(nJ33B>%_;ZFHPs+o{S04=pE=9g)bJ5%vN^RL{jX{pGV+0)$SGCi(rFN zAGXu&1(4UtOKv<_9nKM__@^cxtx}mC6!&H5U6~0oFL-Y1`;vvSD&Y#Kzd|FgdLJ(1 z{(Ck54;F71Eoq-B5{aC+;{p$%;=RJdxdWW%v(5nC9CLj8zrOScjQ4x=-kcTJFd=9g z8u3rWr1fQ0O}DxD*AxZg7{5$^IB~3}>A^?S+kSvI9xxU8#<|4BI~!vSdo;QN_ij-d zFJ3)1C?s+mw4(xh@XHp3)McyYkB*L#qE~ag5x)fUZCsax7rcY{ZO(25zjH2juzItC zy%t3gu;-!?7d+e(Qw^gwSK6|MDa5NRI3H+yeClJ2Y9xin_nbFBKr>oo3<$^+4g$ zg3AX|p93SRaX}cPof2f`%Z~fM#w=_o?7g9#^Vh41rqTcHqy!=uJ7ELqU zv!@1VDDh$*u2;uA_=VN<+kI$eBM!|SXh4HdV?v8Lmq;g|vgox}3hCv@BzhyRE+;4F zihDI0<6adIvTxr$w7>uOP0G9C8LQdY1$ITJMTS!5s=;&G`>mM2)wKs)(h@hm6ckrF zG}Jd{pTTzv2e}CRt;84*C+aQMv=8LViGrsNSF^}lt&P4iCu8pLpM^Y{*!zG8-qd*P z)=r!G^H>?BOyem6A6)XgAuK?I85$v4uN`tLbpNzA>k>WK>yN0N>3mi0woo<=D(JQ| zt{tXi)O`c%Un<5fcH}-Yx_=PM55U}Cn4cbH2uMpf!FVzL7ZH|2p!T!yq=|uuVP(OW zoFHO~x-qeOAgZlF%%@M-S_^NA1_X_QJ2oYyrdT|e6>pVB9RR3feM_y>(QLRtG>hFR zAHv|~pc!Eyts<{WRi$3XKvtvraT{`-QEM`{=St%QH?sM#Zo0g%F9TY9FOn)8j1q?L z-zOID&{r{0TE*8C5fOSuRB_Dj3T;W8xj*uPT^Xwn`qA~&@xa98 z0HQ>(`~$qp1j@#XR>>{c^RQ1MGAmxV8!tXez|XzhT53)ciGJyuIFW+L*r0r*jC#dV z7wHr=kVF@D!^g<%2!jLinOK8HqI4y1zU%u0r{=o`vl{xqMMe}eYV|yAE-eDK={?q%f zpSl1Vm)dvkKEi+Di(4oA1ro-Jpmzxut@tMTvs4lzKdY{n(W3ASojpM1 zB~(le-d)%6ieh8sK|+6l4P+HfKuyn{(*4{7WE9Y(TLn5PLa}WN{k7yiFnvHi^j$>h zYuPr0*X8@>OW|l=N+kKNl9ZSLs^GFXskpJ$05_P2EXu)#BGeT90WvAmKQIZ~YkVuq z1LUqo{fPHW9{Xl&#?pOKo4$cqr_eLxq!CDx{-m!GAo&gmAF^{Vrf9Obwjs3 z7IYkzeZQ=-_ks2*;A=;_pV&D!r7t^UyrR!?mRL$1AeZG6{W=~>2HyUK$ujW;`S+x1 z-M?ELxXvjy1#I2FA%Xz49C~Fe^~afUV!i}ONI$mCL;xKB*b=3QCEuO^kmXW|?f1=) ze2@K>f8{Ii!@k+%KYPVT)wTWaQ0KbJ)4vR}(Jip zDf4*GF{tSS)D(h~h$D1@uL&VvBCErq4Zim*t2{s08s7gU(4nrxf%`CZT;4jm?#hgJ zG715ZEFh10R&*#|=mqH38A_%h|AEDCpMLxwB!IJwJc|^=6fFPFsK4`lTQJf(w*nG> z?LRV$kRN!hkqR+Q;I&FvJsk&D2=Xa;@<#H1$s*gE884D$mecE8@yuUz(OaAFg&Eg3 zPYcX&49-AB;q=DCw-osExEWqa->A%ofQF@M*8Mz?CSG2Gp|2?hjJ#5Unxi7&1tJWhos5_|(*iYo{x26Z$nEJo39!{A;$_1-R zfqm9v1yye`F)REwfDmkcGd8Xv5CF}F$=5?bcM}lgfyU!`nwZBdilw!TY4XR)h0t2P zrh!tU0rSrV0*4Lkv~@-x4%C-MEuNyj8Kr&v9r34&!Z;s6sCIsunO&-{qQF0(kToBC z?oJ|*^M1y=b{0y~Id5;R&Z@=wO%VWCtL~Opw`#;o5gS-%)?!)U@XV=EgRA-g$n+#J z>n-^mGFfg?KrcXfc_4#8!g)ah8ITg*T7InNZBlZMsU#O2%8?l05xunsq`@LU%%GIu zWJ$X~RK(ZsfFbU8l*57(hY^s6a7=|le86WQ?nL>7HE1!-KhCetKLLKE6vu%G)poUM zNPhFUB>&w*z$Y8ZVQ))pPz_Fpr-6V)>v~(XIbR~E{INcDu%jfv4e#aly#zCNF3a0a zbKmMA-8#x=!m?OWfv;zCxW|;)Cz0aHBGPx5SA78cm$OZ!rS! zhfzxz7-`F55KvT$>hZA(lkT=Xo!J)YEqgEp#0!nP|}zp}VH{XP%66l|q(= znrmFcikXBp>iuGopqSpWfgQvkj;N`r6;X;Pxo!AZF-l7FdDh&&X`a!&pT7+ZnmLk_ zt1|8V?BGQ71Pje-ENtxFL1@%0)x@Jw)&@r0(#2WPj6IDBw?B{PizY>!Xmrn1qoIFK z%Tn9>%vxYs_C5y;@vW`LrZ;2LR$@A1)08`7V%=wRRgTuZNfHJJSP1m;Ty;~15P16F z-S;I?X()R&iTdU3d60-;mS-dI7?>olTaK?p-`d1(xmQ$P4izxCF;q`d41>{tt*+>O zyvLV~oA2^eXMfm%JDQ&J7n+hrbJ1oK(6p=AJH5DB(jn0+zSE2O@>2OiTAW6UlH%5G*m9nH%|v#rsV5@f8Pm;Yvh=ey_HPtR(u5_etIZV91`eQM2Py zR31^dI7nQSd+1U|{cDmp6P3`U0lFCzf_~cs6?nT)!IRv*4N+_mq~a6dTbfojf8Y)O{G~=|>e3 zbA1U9;Sv>f@~jW3A@*lL$*Tr8wD{x$MXf5ti!FGU^%h#T4D1d_YFnrp6#N0t8hRi2 zcox@{k+8KsIVu;i^!~FGAH^1*$|jZIaYtta^MSK-Ef*GJn4vA=&|)IxA!VJJu)u%J zGsM?|r0VxaEP6|xP0c0)rH{mtt6t%Zx+;+O>>OYL2?jQcXNo?gqU=?_?RuMODE2U* zY=MoXQh8(a+%I2C-FrE5Ao!&cvw0Z;^$wxCCRv&&{I(Ii_n>1ijpSf78rkkd4?mGl;0TGVL1QK#oIKO!H_PGx_V&cgJ{gY>}y6 zzqnvT@Jk*n7ce@*=Ix2CXI5d~!GK|No_6M1cy_R*n`p9Yd9T!Nlz+5Tc#+S(>`mG}j)NvX8KPO-xL%hdH= zIeY)Eo`5E?-`v@qas3JhoT0T5N{fIV8LZxFn8Hk>G!I7~cJ4qh1NGaDr|qdhqp?PV zsnMPrX9XYH`%$qB&Em`tfj!*pyPjOK+3B!lmpeaFzp2pW6~AqP=tjwa76ohJN-zZb z2(S7FCxV>126b= z%nf%~mEiP$h3^x>f9brq_usS*&e`_YQUtxq5W^bUHrHF0S@d6?;bk5 zdhS=A#F?8QgS>=J|1K@BZVGUV@tC;it{$X)xkqHMntyy*GbO!&1o5-6y~vCWU;n%T zSisN|iGMA-ERo#h6It-oSYrM!^0HQ_0J>1y$FI^rnn)@nK51e_Zc#3|_rAFW>*aLy znH5F^Y0?(>UqB}yYda4xRE>KBnF3tyMzjBP`7rGO=}B`Lc=6i=0pwtAJ^n6eN$w7j zSEzx6yaYXNq0y-?*->VVA%9885d4_ovXb*-jll`>5qp6HHLd36$JKA1HdcihHtDt^ zQp-ySTD{IlrKW*Z0RALAirWek&ShH02=`p@;4UphNf7~V82RPJwZ2gZU^`}c#V)dj z);H*@agquA9~CUfm?m@~|FiJn`>_Ox83_%6}RyK)B#_Ib^}D|h18Uo9|clr+&&?f??tpb0qi9|`-E1CPhP zv@*^At_1-nmEeToN2Sf_f-{OR+ZWPq|4)hkppcOAU8WgKZv9>Rag+1u*9KgxKBv>-*_H^scA87mQiFr8 ztAIj^s`=z%y?B{E_i~GeTKgi^O3gnQc>kbpUc=Xi9 z2t2qNx(0gE9_h5!Hn literal 0 HcmV?d00001 diff --git a/docs/Application_guide/zh/media/system/thread/thread_single_multi_compare.png b/docs/Application_guide/zh/media/system/thread/thread_single_multi_compare.png new file mode 100644 index 0000000000000000000000000000000000000000..c7fd5c90535d6c981680454ba206a69d75d61159 GIT binary patch literal 9268 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 D;txfX literal 0 HcmV?d00001 diff --git a/docs/Application_guide/zh/system/thread.md b/docs/Application_guide/zh/system/thread.md new file mode 100644 index 00000000..0f6c371c --- /dev/null +++ b/docs/Application_guide/zh/system/thread.md @@ -0,0 +1,782 @@ +# 多线程 + +## 概述 + +多线程是指从软件或者硬件上实现多个线程并发执行的技术。在一个程序中同时执行多个线程,每个线程都可以执行独立的任务,可以让程序在执行阻塞操作(如I/O操作)时不会阻塞整个程序的执行,从而提高程序的效率。 + +![](../media/system/thread/thread_single_multi_compare.png) + +QuecPython _thread 模块包含软件层线程操作相关的功能,提供创建、删除线程的方法以及互斥锁、信号量等相关的接口。并且 QuecPython 提供 queue、sys_bus、EventMesh等组件模块方便多线程业务处理。 + +## 多线程实现原理 + +QuecPython 本身并没有创建线程资源,QuecPython 中一个线程对应底层 RTOS 系统中一个线程,依赖于底层的线程调度。那么底层是如何调度的进行多任务执行的? + +### 线程创建 + +python 创建线程提供了较为便捷的创建方式,忽略了底层的栈大小配置,优先级等参数传递,尽量简化用户使用。python 创建线程时会在底层 RTOS 系统中生成对应的任务控制块(TCB),用于任务调度及线程资源控制。 + +协议栈大小默认配置 8k。并且也为客户提供了栈大小的配置,可以通过 `_thread.stack_size()` 接口对栈大小进行配置查询。 + +```python +import _thread +import utime + +# 线程函数入口,实现每隔一秒进行一次打印。 +def thread_func_entry(id, name): + while True: + print( 'thread {} name is {}.'.format(id, name)) + utime.sleep(1) + +# 创建线程 +_thread.start_new_thread(thread_func_entry, (1, 'QuecPython')) + +``` + +### 线程状态 + +线程有着自己的生命周期,从创建到结束,总是处于下面五个状态之一:新建状态(creation)、就绪状态(runnable)、运行状态(running)、阻塞状态(blocked)、终止状态(dead)。 + +![](../media/system/thread/thread_life_status.png) + +- 新建状态(creation):创建线程,实现线程可运行状态初始化。 +- 就绪状态(runnable):处于这个状态的线程位于可运行池中,等待获得 CPU 的使用权。 +- 运行状态(running):当就绪状态中的线程获得了 CPU 执行资源,执行线程函数中的代码,这样的线程我们称为运行状态的线程。 +- 阻塞状态(blocked):处于运行中的线程,由于某种原因放弃对 CPU 的使用权,处于阻塞状态,此时线程被挂起,不再执行,直到其进入就绪状态,才有机会再次被 CPU 调用进入运行状态。这种阻塞状态可能由多种原因导致,比如调用 sleep,信号量,锁等方式。 +- 终止状态(dead):线程在完成执行或异常中止时进入终止状态。 + +### 线程调度机制 + +多线程同时执行是伪命题,实际多线程并不是所有线程都能一直运行,一直独占 CPU,不论硬件资源多强大,对于创建成千上万个线程,都是需要一定的调度算法实现多线程的,那么多线程的调度机制是如何实现的呢? + +在 RTOS 系统中,常见调度机制时间片轮询调度、基于优先级的协同调度、抢占式调度。一般在 RTOS 系统中,包含多种调度算法结合使用。 + +#### 时间片轮询调度 + +RTOS 中的轮询调度策略,是允许多个任务可以分配同一个优先级别。调度程序基于 CPU 时钟监控任务时间,任务处于相同优先级,按照先进先出的原则执行分配到的时间片,时间到了,即使当前任务还没有完成,任务也将 CPU 时间传递给下一个任务。在下一个分配到的时间段内,该任务将从它停止的位置继续执行。 + +如下图所示,根据 cpu tick 时间划分一个一个时间片,每个时间片结束后,会切换到下个就绪状态的任务执行,然后依次执行就绪状态任务A、B、C。 + +![](../media/system/thread/thread_multi_time_work.png) + +#### 基于优先级的协同调度 + +RTOS 中的优先级协同调度,是基于优先级的非抢占调度方法。任务按优先级排序,并且是事件驱动类型的,一旦正在运行的任务完成,或者任务主动放弃 CPU 使用,就绪运行的优先级最高的任务才可以获得 CPU 使用权。 + +如下图所示,根据优先级任务调度方法,在执行任务 A 时,出现中断时间任务,会立马执行高优先级中断事件任务,高优先级中断执行完成或者让出 CPU 后,继续执行任务 A,在任务 A 完成后或者让出 CPU 后,再切换到较高优先级任务 B。 + +![](../media/system/thread/thread_multi_priority_work.png) + +#### 抢占式调度 + +RTOS 通过可抢占调度保证实时性。为了保证任务响应,在抢占调度策略中,只要一个优先级更高的任务就绪,正在运行的任务低优先级任务将被切换出来。通过抢占,正在运行的任务被迫放弃 CPU,即使任务工作还没有完成。 + +如下图所示,根据抢占式调度方法,执行任务 A 时,出现优先级高的任务 C,会立即切换到任务 C 执行,在高优先级任务 C 执行完成或者让出 CPU 后,根据当前就绪状态的线程任务中找优先级较高的任务执行,此时执行任务 B,任务 B 执行完成或者让出 CPU 后,再继续执行任务 A。 + +![](../media/system/thread/thread_multi_preemptive_work.png) + +### 线程上下文切换 + +实际多线程运行中,总是通过不断切换来保持多个线程同时运行的,那么对于多线程任务调度切换过程是如何进行的?切换后如何恢复运行? + +当操作系统需要运行其他的任务时,操作系统首先会保存和当前任务相关的寄存器的内容到当前任务的栈中,然后从将要被加载的任务的栈中,取出之前保存的全部寄存器的内容并加载到相关的寄存器中,从而继续运行被加载的任务,这个过程叫作线程上下文切换。 + +线程上下文切换会带来额外的开销,包括对线程上下文信息保存和恢复的开销,对线程进行调度的 cpu 时间开销以及 cpu 缓存失效的开销。 + +### 线程清除 + +线程是系统最小的调度单位,系统线程创建及释放需要对应的资源创建及清除。 + +QuecPython 为简便客户使用,在线程运行结束后,会自动释放线程资源,可以无需关心线程资源释放问题,对于需要在其他线程控制某线程关闭,可以通过 `_thread.stop_thread(thread_id)` 接口,根据 thread_id 来控制指定线程。 +> 通过 _thread.stop_thread(thread_id) 暴力关闭线程,释放线程资源,需要注意对应线程是否有锁、内存申请等需要用户释放的相关操作,防止导致死锁或者内存泄漏情况。 + +```python +import _thread +import utime + +# 线程函数入口,实现每隔一秒进行一次打印。 +def thread_func_entry(id, name): + while True: + print( 'thread {} name is {}.'.format(id, name)) + utime.sleep(1) + +# 创建线程 +thread_id = _thread.start_new_thread(thread_func_entry, (1, 'QuecPython')) + +# 延时 10 秒后删除每秒打印线程。 +utime.sleep(10) +_thread.stop_thread(thread_id) +``` + +### QuecPython 多线程处理 + +QuecPython 多线程依赖于底层系统的调度方式,并且在此基础上增加 GIL 锁实现多线程。 + +python 是解释器语言,对于多线程其也需要按顺序执行,因此引入 GIL 全局锁概念,防止因为多线程状况下引起共享资源异常问题。详细 GIL 锁概念请参考[虚拟机章节介绍]()。 + +QuecPython 线程在系统基础上定义了主线程、python 子线程、中断/回调线程,并固定其优先级,其主线程(repl交互线程)优先级 < python 子线程 < 中断/回调线程。 + +如下图所示,QuecPython 多线程处理切换过程,执行任务 A 时,在任务 A 释放 GIL 锁后,切换到优先级高的中断任务 C,在高优先级任务 C 释放 GIL 后,执行优先级较高的任务 B 并加 GIL 锁,任务 B 执行释放 GIL 锁后,再继续执行任务 A。QuecPython 避免 GIL 锁导致高优先级任务无法执行及多线程调度灵活性,在执行一定次数后会自动释放 GIL 锁,由系统调度。 + +![](../media/system/thread/thread_multi_python_gil_work.png) + +## 线程间通信&资源共享 + +线程间通信指至少两个进程或线程间传送数据或信号的一些技术或方法。在多线程中使用中,线程间通信必不可少,通过线程间通信控制线程运行,共享资源控制、消息传递等,实现程序的多样化。 + +| 线程间通信 | 适用场景 | 资源消耗 | +| ---- | ---- | ---- | +| 互斥锁 | 用于信号传递,不可数据传递,常对于多线程公共资源竞争进行保护,控制程序运行。| 使用资源消耗较少。 | +| 信号量 | 用于信号传递,不可数据传递,常对于多线程公共资源竞争进行保护,控制程序运行。相比较互斥锁更加灵活。 | 使用资源消耗较少。 | +| 共享变量 | 数据传递,常搭配互斥锁、信号量使用。| 使用资源消耗较少。 | +| 消息队列 | 用于信号传递,数据传递,适用于生产者-消费者模型。| 使用资源消耗中等。 | +| sys_bus | 数据传递,一对一通信或者一对多通信,基于发布/订阅范式的数据协议。| 异步发布数据使用资源较大。 | +| EventMesh | 数据传递,一对一通信,基于发布/订阅范式的数据协议。 | 异步发布数据使用资源较大。 | + + +### 互斥锁 + +互斥锁是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制。互斥锁目的通过将代码切片成一个一个的临界区域,以达到对临界区域保护作用,使得多线程能够顺序访问。 + +```python +# 该示例线程 B 一定条件下通过互斥锁控制线程 A 运行,达到线程间通信目的。 +import _thread +import utime + +lock = _thread.allocate_lock() +count = 1 + +# 线程 B 函数入口,通过锁控制,防止同时操作操作全局变量count。 +def thread_entry_B(id): + global count + while True: + with lock: + print( 'thread {} count {}.'.format(id, count)) + count += 1 + utime.sleep(1) + +# 线程 A 函数入口,通过锁控制,防止同时操作操作全局变量count。 +def thread_entry_A(id): + global count + while True: + with lock: + print('thread {} count {}.'.format(id, count)) + count += 1 + +# 创建线程 +_thread.start_new_thread(thread_entry_A, ('A',)) +_thread.start_new_thread(thread_entry_B, ('B',)) +``` + +### 信号量 + +信号量(英语:semaphore)又称为信号标,是一个同步对象,用于保持在 0 至指定最大值之间的一个计数值。当线程完成一次对该 semaphore 对象的等待时,该计数值减一;当线程完成一次对 semaphore 对象的释放时,计数值加一。 + +通过信号量的控制,以达到对多线程控制的目的,比如多线程对于资源操作的顺序或者执行有因果关系,必须通过一个线程先进行而后其他线程才能进行处理,可以通过信号量进行控制。 + +```python +# 该示例线程 B 一定条件下通过信号量控制线程 A 运行,达到线程间通信目的。 +import _thread +import utime + +semphore = _thread.allocate_semphore(1) + +# 线程 B 函数入口,通过信号量控制线程 A 运行。 +def thread_entry_B(id): + while True: + print('this is thread {}.'.format(id)) + utime.sleep(1) + semphore.release() + +# 线程 A 函数入口,等待信号量运行。 +def thread_entry_A(id): + while True: + semphore.acquire() + print('this is thread {}.'.format(id)) + +# 创建线程 +_thread.start_new_thread(thread_entry_A, ('A',)) +_thread.start_new_thread(thread_entry_B, ('B',)) +``` + +### 共享变量 + +共享变量指多个线程同时对同一个变量进行读写操作,并且这些操作都能够影响到其他线程。 + +在进行多线程编程时,使用共享变量,需要对共享变量进行合理的管理和控制,避免多线程竞态条件的出现。 + +```python +# 该示例一个线程修改共享变量,一个线程读取,当存在多线程写入时,需要考虑变量安全,防止出现意外情况。 +import _thread +import utime + +lock = _thread.allocate_lock() +count = 1 + +# 线程 B 函数入口,共享变量 count 累增。 +def thread_entry_B(id): + global count + while True: + count += 1 + utime.sleep(1) + +# 线程 A 函数入口,共享变量 count 读取打印。 +def thread_entry_A(id): + global count + while True: + print('thread {} current count is {}.'.format(id, count)) + utime.sleep(5) + +# 创建线程 +_thread.start_new_thread(thread_entry_A, ('A',)) +_thread.start_new_thread(thread_entry_B, ('B',)) +``` + +### 消息队列 + +消息队列实现了多生产者、多消费者队列。采用数据先进先出的数据结构,这特别适用于消息必须安全地在多线程间交换的线程编程。常用于消息异步处理,比如接收数据线程防止接收阻塞,只是对数据进行入栈存储,另一个线程专门处理消息队列消息。 + +```python +# 该示例线程 B 通过将消息压栈,线程 A 专门读取消息队列的内容进行处理。 +import _thread +import utime +from queue import Queue + +q = Queue() + +# 线程 B 函数入口,共享变量 count 累增。 +def thread_entry_B(id): + data = 'Hello QuecPython!' + while True: + q.put(data) + print('thread {} send {}.'.format(id, data)) + utime.sleep(3) + +# 线程 A 函数入口,共享变量 count 读取打印。 +def thread_entry_A(id): + while True: + data = q.get() + print('thread {} recv {}.'.format(id, data)) + +# 创建线程A、B。 +_thread.start_new_thread(thread_entry_A, ('A',)) +_thread.start_new_thread(thread_entry_B, ('B',)) +``` + +### sys_bus + +sys_bus 组件用于消息的订阅和发布。在多线程中可用于,多个线程多个消息的解耦处理,通过定义不同的类型的 topic 用于处理不同的事务,任何线程可以随时通过 publish 来处理该消息。 +> 该组件能够一对多或者多对多通信,即一个topic同时多个订阅者,发布到该topic的消息,所有订阅者均能处理。 + +```python +# 该示例线程通过订阅 topic,A、B 线程分别向其订阅topic发送订阅消息处理。 +import _thread +import utime +import sys_bus + +def callback_A(topic, msg): + print("topic = {} msg = {}".format(topic, msg)) + +def callback_B(topic, msg): + print("topic = {} msg = {}".format(topic, msg)) + +# 线程 B 函数入口,订阅 sysbus/thread_B topic并定时3秒发送消息到sysbus/thread_A topic。 +def thread_entry_B(id): + sys_bus.subscribe("sysbus/thread_B", callback_B) + while True: + sys_bus.publish_sync("sysbus/thread_A", "this is thread B msg") + utime.sleep(3) + +# 线程 A 函数入口,订阅 sysbus/thread_A topic并定时3秒发送消息到sysbus/thread_B topic。 +def thread_entry_A(id): + sys_bus.subscribe("sysbus/thread_A", callback_A) + while True: + sys_bus.publish_sync("sysbus/thread_B", "this is thread A msg") + utime.sleep(3) + +# 创建线程A、B。 +_thread.start_new_thread(thread_entry_A, ('A',)) +_thread.start_new_thread(thread_entry_B, ('B',)) +``` + +```python +# 该示例线程 A、B 通过订阅同一 topic,实现一对多进行通信,其他线程发布消息到该topic,A、B线程均收到内容。 +import _thread +import utime +import sys_bus + +def callback_A(topic, msg): + print("callback_A topic = {} msg = {}".format(topic, msg)) + +def callback_B(topic, msg): + print("callback_B topic = {} msg = {}".format(topic, msg)) + +# 线程 B 函数入口,订阅 sysbus/multithread topic。 +def thread_entry_B(id): + sys_bus.subscribe("sysbus/multithread", callback_B) + while True: + utime.sleep(10) + +# 线程 A 函数入口,订阅 sysbus/multithread topic。 +def thread_entry_A(id): + sys_bus.subscribe("sysbus/multithread", callback_A) + while True: + utime.sleep(10) + +# 创建线程A、B。 +_thread.start_new_thread(thread_entry_A, ('A',)) +_thread.start_new_thread(thread_entry_B, ('B',)) + +# 主线程间隔3秒发布消息到 sysbus/multithread topic。 +while True: + sys_bus.publish_sync("sysbus/multithread", "sysbus broadcast conntent!") + utime.sleep(3) +``` + +### EventMesh + +EventMesh 组件用于消息的订阅和发布。在多线程中可用于,多个线程多个消息的解耦处理,通过定义不同的类型的 topic 用于处理不同的事务,任何线程可以随时通过 publish 来处理该消息。 +> 该组件只能一对一或者多对一通信,即一个topic同时只能一个订阅者,最后一个订阅的会挤掉其他订阅者。 + +> [点此在 github 中下载 EventMesh 组件代码。](https://github.com/QuecPython/EventMesh) + +```python +# 该示例线程通过订阅 topic,A、B 线程分别向其订阅 topic 发送订阅消息处理。 +import _thread +import utime +from usr import EventMesh + +def callback_A(topic, msg): + print("topic = {} msg = {}".format(topic, msg)) + +def callback_B(topic, msg): + print("topic = {} msg = {}".format(topic, msg)) + +# 线程 B 函数入口,订阅 EventMesh/thread_B topic并定时3秒发送消息到EventMesh/thread_A topic。 +def thread_entry_B(id): + EventMesh.subscribe("EventMesh/thread_B", callback_B) + while True: + EventMesh.publish_sync("EventMesh/thread_A", "this is thread B msg") + utime.sleep(3) + +# 线程 A 函数入口,订阅 EventMesh/thread_A topic并定时3秒发送消息到EventMesh/thread_B topic。 +def thread_entry_A(id): + EventMesh.subscribe("EventMesh/thread_A", callback_A) + while True: + EventMesh.publish_sync("EventMesh/thread_B", "this is thread A msg") + utime.sleep(3) + +# 创建线程A、B。 +_thread.start_new_thread(thread_entry_A, ('A',)) +_thread.start_new_thread(thread_entry_B, ('B',)) +``` + +```python +# 该示例线程 A、B 通过订阅同一 topic,EventMesh 一个 topic 只能一个订阅,B 最后订阅,会直接挤掉 A 的订阅,只有 B 线程能收到该 topic 消息。 +import _thread +import utime +from usr import EventMesh + +def callback_A(topic, msg): + print("callback_A topic = {} msg = {}".format(topic, msg)) + +def callback_B(topic, msg): + print("callback_B topic = {} msg = {}".format(topic, msg)) + +# 线程 B 函数入口,订阅 EventMesh/multithread topic。 +def thread_entry_B(id): + EventMesh.subscribe("EventMesh/multithread", callback_B) + while True: + utime.sleep(10) + +# 线程 A 函数入口,订阅 EventMesh/multithread topic。 +def thread_entry_A(id): + EventMesh.subscribe("sysbus/multithread", callback_A) + while True: + utime.sleep(10) + +# 创建线程A、B。 +_thread.start_new_thread(thread_entry_A, ('A',)) +_thread.start_new_thread(thread_entry_B, ('B',)) + +# 主线程间隔3秒发布消息到 EventMesh/multithread topic。 +while True: + EventMesh.publish_sync("EventMesh/multithread", "EventMesh broadcast conntent!") + utime.sleep(3) +``` + +## 多线程应用案例 + +### 简单多线程示例 + +简单多线程使用示例,如下所示创建线程A、B,各自做自己的独立任务。因此在需要任务长时间运行,并且会阻塞后续任务执行时,可以采用多线程的方式进行执行。 + +```python +import _thread +import utime + +# 线程 B 函数入口,每隔 3 秒打印一次。 +def thread_entry_B(id): + while True: + print('thread {} is running.'.format(id)) + utime.sleep(3) + +# 线程 A 函数入口,每隔 3 秒打印一次。 +def thread_entry_A(id): + while True: + print('thread {} is running.'.format(id)) + utime.sleep(3) + +# 创建线程 +_thread.start_new_thread(thread_entry_A, ('A',)) +_thread.start_new_thread(thread_entry_B, ('B',)) +``` + +### 多线程原子性操作 + +原子操作指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会切换到其他线程。 + +多线程原子性操作,它表示在多个线程访问同一个共享资源的时候,能够确保所有其他的线程都不在同一时间内访问相同的资源。因此在多线程对同一资源进行访问时,但是该资源无法同时进行访问可以采用该方法实现。 + +如下示例线程 A、B 同时操作共享资源,加锁对共享资源进行保护,保证共享资源在同时只能一个线程访问。 +```python +import _thread +import utime + +lock = _thread.allocate_lock() +count = 1 + +def shared_res(id): + global count + with lock: + print( 'thread {} count {}.'.format(id, count)) + count += 1 + +# 线程 B 函数入口,对共享资源 count 进行累加操作。 +def thread_entry_B(id): + while True: + shared_res(id) + utime.sleep(1) + +# 线程 A 函数入口,对共享资源 count 进行累加操作。 +def thread_entry_A(id): + global count + while True: + shared_res(id) + utime.sleep(1) + +# 创建线程 +_thread.start_new_thread(thread_entry_A, ('A',)) +_thread.start_new_thread(thread_entry_B, ('B',)) +``` + +### 多线程顺序执行 + +多线程顺序执行,通过信号量控制,实现多线程按照顺序进行执行。常用于对于多线程执行有依赖关系,可以通过该种方式进行控制运行。 + +如下示例线程 A、B、C 三个线程,通过信号量控制,实现顺序运行,按照A、B、C 顺序打印。 +```python +import _thread +import utime + +semphore_A = _thread.allocate_semphore(1) +semphore_B = _thread.allocate_semphore(1) +semphore_C = _thread.allocate_semphore(1) + +# 线程 C 函数入口,通过信号量控制线程 A 运行。 +def thread_entry_C(id): + count = 0 + while count < 30: + semphore_B.acquire() + print('this is thread {}.'.format(id)) + utime.sleep_ms(100) + semphore_C.release() + count += 1 + +# 线程 B 函数入口,通过信号量控制线程 C 运行。 +def thread_entry_B(id): + count = 0 + while count < 30: + semphore_A.acquire() + print('this is thread {}.'.format(id)) + utime.sleep_ms(100) + semphore_B.release() + count += 1 + +# 线程 A 函数入口,等待信号量运行。 +def thread_entry_A(id): + count = 0 + while count < 30: + semphore_C.acquire() + print('this is thread {}.'.format(id)) + utime.sleep_ms(100) + semphore_A.release() + count += 1 + +# 清空 A、B 信号量。保证只能线程 A 先运行,及多余信号量干扰。 +semphore_A.acquire() +semphore_B.acquire() + +# 创建线程A、B、C。 +_thread.start_new_thread(thread_entry_A, ('A',)) +_thread.start_new_thread(thread_entry_B, ('B',)) +_thread.start_new_thread(thread_entry_C, ('C',)) +``` + +### 生产者-消费者模式 + +生产者-消费者模式一般用于将生产数据的一方和消费数据的一方分割开来,将生产数据与消费数据的过程解耦开来。 + +在多线程开发中,如果生产者生产数据的速度很快,而消费者消费数据的速度很慢,那么生产者就必须等待消费者消费完了数据才能够继续生产数据,因为生产那么多也无法处理,所以为了达到生产者和消费者生产数据和消费数据之间的平衡,那么就需要一个缓冲区用来存储生产者生产的数据,所以就引入了生产者-消费者模式。 + +如下示例线程生产者每隔 3 秒发送给消费者信息、消费者等待生产者消息进行打印处理。 +```python +# 该示例线程 B 通过将消息压栈,线程 A 专门读取消息队列的内容进行处理。 +import _thread +import utime +from queue import Queue + +q = Queue() + +# 线程生产者函数入口,输出信息供给消费者。 +def thread_producer(id): + data = 'Hello QuecPython!' + while True: + q.put(data) + print('thread {} send: {}.'.format(id, data)) + utime.sleep(3) + +# 线程消费者函数入口,处理生产者信息。 +def thread_consumer(id): + while True: + data = q.get() + print('thread {} recv: {}.'.format(id, data)) + +# 创建线程producer、consumer。 +_thread.start_new_thread(thread_producer, ('producer',)) +_thread.start_new_thread(thread_consumer, ('consumer',)) +``` + +### 中断处理流程 + +在多线程处理中,对于提供的中断/回调接口是其他线程的操作,在使用时需要注意不要在中断/回调中做延时任务,延时任务会导致后续中断/回调阻塞,从而导致中断/回调触发接口异常。对于在接收中断/回调后处理过程中需要耗时操作,一般是通过线程间通信方式,交给其其他独立线程进行任务处理。 + +如下示例实操对于串口数据中断触发,通过消息队列控制另一个接口进行数据读取及处理,防止对中断/回调接口阻塞丢包等问题。 +```python +# 该示例串口触发中断/回调,防止读取串口及串口数据处理延时,通过消息队列控制专门线程对串口数读取及处理。 +import _thread +from machine import UART +from queue import Queue + +# 串口数据读取线程函数入口,通过消息队列触发消息读取。 +def thread_entry(): + while True: + len = uart_msg_q.get() + data = UART2.read(len) + print('uart read len {}, recv: {}.'.format(len, data)) + +def callback(para): + print("uart call para:{}".format(para)) + if(0 == para[0]): + uart_msg_q.put(para[2]) + +uart_msg_q = Queue() +UART2 = UART(UART.UART2, 115200, 8, 0, 1, 0) +UART2.set_callback(callback) + +# 创建线程 +_thread.start_new_thread(thread_entry, ()) +``` + +## API 说明 + +### 线程栈大小设置及查询 + +线程栈大小设置及查询,方便根据自己业务动态调整栈大小。 + +```python +import _thread +import utime + +# 线程函数入口,实现每隔一秒进行一次打印。 +def thread_func_entry(name): + while True: + print( 'thread {} id is {}.'.format(name, thread_id)) + utime.sleep(1) + +#查询当前协议栈大小 +thread_size_old = _thread.stack_size() +print('current thread_size_old {}'.format(thread_size_old)) + +#设置线程栈大小为 10k +_thread.stack_size(10*1024) + +# 创建线程 +thread_id = _thread.start_new_thread(thread_func_entry, ('QuecPython')) + +#还原线程栈大小 +_thread.stack_size(thread_size_old) +``` + +### 线程创建及删除 + +线程创建及删除接口,方便通过该接口建立并行任务或者中断某个任务执行。删除某个任务指中断某个正常执行的任务,对于自动完成的任务,直接退出即可。 +> 通过 _thread.stop_thread(thread_id) 暴力关闭线程,释放线程资源,需要注意对应线程是否有锁、内存申请等需要用户释放的相关操作,防止导致死锁或者内存泄漏情况。 +```python +import _thread +import utime + +# 线程函数入口,实现每隔一秒进行一次打印。 +def thread_func_entry(name): + while True: + print( 'thread {} id is {}.'.format(name, thread_id)) + utime.sleep(1) + +# 创建线程 +thread_id = _thread.start_new_thread(thread_func_entry, ('QuecPython')) + +utime.sleep(10) +#删除线程 +_thread.thread_stop(thread_id) +``` + +### 互斥锁 + +互斥锁是为了解决在多线程访问共享资源时,多个线程同时对共享资源操作产生的冲突而提出的一种解决方法。 + +如下示例介绍互斥锁创建、加锁、解锁、删除锁的使用过程。 +```python +# 该示例线程 B 一定条件下通过互斥锁控制线程 A 运行,达到线程间通信目的。 +import _thread +import utime + +# 创建线程锁 +lock = _thread.allocate_lock() +count = 1 + +# 线程 B 函数入口,通过锁控制,防止同时操作操作全局变量count。 +def thread_entry_B(id): + global count + while True: + # 获取线程锁,加锁。 + lock.acquire() + print( 'thread {} count {}.'.format(id, count)) + count += 1 + utime.sleep(1) + # 释放线程锁,解锁。 + lock.release() + +# 线程 A 函数入口,通过锁控制,防止同时操作操作全局变量count。 +def thread_entry_A(id): + global count + while True: + # 获取线程锁,加锁。 + lock.acquire() + print('thread {} count {}.'.format(id, count)) + count += 1 + # 释放线程锁,解锁。 + lock.release() + +# 创建线程 +thread_id_A = _thread.start_new_thread(thread_entry_A, ('A',)) +thread_id_B = _thread.start_new_thread(thread_entry_B, ('B',)) + +utime.sleep(10) + +# 删除锁 +_thread.thread_stop(thread_id_A) +_thread.thread_stop(thread_id_B) +_thread.delete_lock(lock) +``` + +### 信号量 + +信号量是操作系统用来解决并发中的互斥和同步问题的一种方法,是进化版的互斥锁。 + +如下示例介绍信号量创建、释放信号量、消耗信号量、删除信号量的使用过程。 +```python +# 该示例线程 B 一定条件下通过信号量控制线程 A 运行,达到线程间通信目的。 +import _thread +import utime + +semphore = _thread.allocate_semphore(1) + +# 线程 B 函数入口,通过信号量控制线程 A 运行。 +def thread_entry_B(id): + while True: + print('this is thread {}.'.format(id)) + utime.sleep(1) + # 释放信号量 + semphore.release() + +# 线程 A 函数入口,等待信号量运行。 +def thread_entry_A(id): + while True: + # 消耗信号量 + semphore.acquire() + print('this is thread {}.'.format(id)) + +# 创建线程 +_thread.start_new_thread(thread_entry_A, ('A',)) +_thread.start_new_thread(thread_entry_B, ('B',)) + +# 删除信号量 +_thread.thread_stop(thread_id_A) +_thread.thread_stop(thread_id_B) +_thread.delete_semphore(semphore) +``` + +## 常见问题 + +1. 线程创建失败 + + 一般情况下,创建线程失败基本都是由于内存不足导致的。可以使用`_thread.get_heap_size()`确认当前内存大小,并且通过调整线程栈空间的方式,尽量节省内存消耗,当然栈空间需要满足使用空间需求,否正会出现dump。 + +2. 线程资源如何释放防止内存泄漏 + + 当前线程退出可以通过两种方式,通过接口`_thread.thread_stop(thread_id)`,可以直接在外部中断程序运行。或者线程自动运行结束退出,系统会自动回收线程资源。 + +3. 线程死锁问题 + + 死锁(英语:deadlock),当多线程情况下,双方都在等待对方停止执行,以获取系统资源,但是没有一方提前退出时,就称为死锁。 + + 需要保证线程锁成对使用,加锁后不应该有较多任务,避免锁内再掉锁等情况, 并且`_thread.thread_stop(thread_id)`慎用,防止出现加锁过程中,退出程序导致死锁。 + +4. 如何唤醒阻塞线程 + + 对于需要阻塞的线程,可以通过线程间通信的方式实现,能够唤醒的方式进行阻塞,不要采用sleep等方式,无法唤醒。 + +5. 优先级 + + QuecPython 固定优先级,当前主线程(repl交互线程)优先级 < python 子线程 < 中断/回调线程。用户创建所有的 python 子线程优先级同级。 + +6. 如何进行线程保活 + + 当前尚未提供 python 守护线程,或者线程状态查询接口,如果需要保证线程存活,可以自定义保活机制,比如根据需要保活的线程的使用情况,进行计数统计,保证线程在一定时间内会执行某个动作,若未完成,则进行线程清除及重新创建。 + +7. 线程死循环 + + 当前QuecPython适配较多平台,对于线程死循环可能会导致业务无法进行,系统喂狗超时,导致dump。 + +8. 线程栈耗尽 + + QuecPython 不同的平台上,默认创建线程栈空间不同,默认2k/8k,当线程业务量较大时会导致栈溢出,会导致无法预知dump,因此需要考虑当前默认栈是否满足业务需要,通过`_thread.thread_size()`接口确认当前栈大小及设置栈大小。 + +9. 线程安全 + + 线程安全是多线程编程是的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且准确的执行,不会出现数据污染等意外情况。 + 我们支持互斥锁、信号量等方式进行数据保护,在进行多线程共享数据时,用户可以根据需要进行使用。 + +10. 中断、回调、python 子线程、主线程(repl交互线程)的优先级对比。 + + 中断/回调依赖与其触发线程的,不同的中断/回调具有不同的触发对象,因此无法确定其优先级。 + + 主线程(repl交互线程)优先级 < python 子线程 < 中断/回调线程。 + +11. 相同优先级的是否支持时间片轮转。 + + 支持,但是是受限的,由于 python 层 GIL 锁机制,线程在调度后会添加 GIL 锁,只有保证 GIL 锁是空闲的才能执行成功,直到 python 线程执行结束或者让出 GIL 锁,其他线程才能会被执行。 + +12. 是否支持线程优先级配置。 + + 不支持。 -- Gitee