これは、実際のユーザー、およびシステムのタイミングの意味に関する詳細に美しく答えます。引用するには:
「Real」は実時間です。つまり、通話の開始から終了までの時間です。これは、他のプロセスによって使用されるタイム スライスと、プロセスがブロックされている時間 (たとえば、I/O の完了を待機している場合) を含むすべての経過時間です。
「ユーザー」は、プロセス内のユーザー モード コード (カーネルの外部) で費やされた CPU 時間の量です。これは、プロセスの実行に使用される実際の CPU 時間のみです。他のプロセスとプロセスがブロックされた時間は、この数値にはカウントされません。
「Sys」は、プロセス内のカーネルで費やされた CPU 時間の量です。これは、ユーザー空間でまだ実行されているライブラリ コードとは対照的に、カーネル内のシステム コールで費やされた CPU 時間を実行することを意味します。「ユーザー」と同様に、これはプロセスによって使用される CPU 時間のみです。
上記の説明から、User+Sys 時間は CPU 秒に等しいように見えます。代わりに、「リアルタイム」に近くなります。変!
それには正当な説明があります。「ユーザー」時間には、プロセス内の I/O 操作に費やされた CPU 秒は含まれません。メモリ内のユーザー モード コードに費やされた CPU 時間を測定するだけです。経験則は次のとおりです。
リアルタイム = ユーザー + システム + I/O 時間 + インタープリターの起動時間 + バイトコードのコンパイル時間
これを検証するために、私はurllib2.urlopen(urllib2.Request(url))集中的な I/O を実行する呼び出しを行いました。結果は次のとおりです。
100792 function calls (98867 primitive calls) in 2.076 CPU seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
512 0.719 0.001 0.719 0.001 {method 'recv' of '_socket.socket' objects}
1 0.464 0.464 0.473 0.473 {_socket.getaddrinfo}
1 0.352 0.352 0.352 0.352 <string>:1(connect)
1 0.248 0.248 0.348 0.348 common_functions.py:1(<module>)
1 0.022 0.022 0.075 0.075 __init__.py:2(<module>)
1 0.017 0.017 0.030 0.030 urllib.py:1442(getproxies_macosx_sysconf)
330/67 0.012 0.000 0.031 0.000 sre_parse.py:385(_parse)
real 0m2.255s
user 0m0.352s
sys 0m0.093s
ここでは、2.076-(0.352+0.093)、つまり 1.631 CPU 秒が I/O 操作 (主に_socket.socketと_socket.getaddrinfo) で消費されました。残りの 2.255 ~ 2.076 時間は、コードのコールド スタートに費やされました。
それが役に立ったことを願っています。
更新: 複数の CPU が並行して動作するマルチコア システムでは、ケースが少し異なります。cProfile によって報告される合計 CPU 秒は、すべての CPU が個別に費やした時間の合計です。例: 2 コア システムで、1 つの CPU が 10 秒間動作する場合。並行して、別の CPU が 15 秒間動作します。報告される合計 CPU 秒は 25 秒です。実際の経過時間はわずか15秒かもしれませんが。したがって、CPU 時間は、マルチコア システムではリアルタイムよりも長くなる場合があります。CPUが並行して動作しているため