PowerShell v4, 144 바이트
$d=date;gjb|rjb
1..20|%{sajb{$x=date;sleep 3;((date)-$x).Ticks/1e7}>$null}
while(gjb -s "Running"){}(gjb|rcjb)-join'+'|iex
((date)-$d).Ticks/1e7
세트 $d
에 동일 Get-Date
하고, 어떤 기존의 작업 기록을 삭제합니다 Get-Job | Remove-Job
. 그런 다음 루프를 반복 1..20|%{...}
하고 각 반복 이 작업에 대한 Start-Job
스크립트 블록 {$x=date;sleep 3;((date)-$x).ticks/1e7}
을 전달합니다 (각 작업이 해당 스크립트 블록을 실행 함을 의미 함). >$null
반환되는 피드백 (즉, 작업 이름, 상태 등)을 억제하기 위해 출력을 파이프합니다 .
스크립트 블록 세트 $x
로는 Get-Date
다음 Start-Sleep
을 위해 3
초, 새로운 소요 Get-Date
, 독서를 뺍 $x
의를 가져 .Ticks
, 그리고에 의해 분할 1e7
(정밀) 초를 얻을 수 있습니다.
메인 스레드로 -S
돌아가서 어떤 작업이 여전히 tatus "Running"
인 한 빈 while
루프 내부에서 회전 합니다. 이 작업이 완료되면 Get-Job
기존의 모든 작업에 대한 객체를 Receive-Job
가져 와서 STDOUT에 해당하는 항목 (즉, 출력되는 내용), -join
결과와 함께 가져 +
와서 파이프를 연결합니다 iex
( Invoke-Expression
와 유사 eval
). 그러면 결과 절전 시간과 오버 헤드가 출력됩니다.
최종 라인은 새로운 날짜를 얻는다 원래 날짜 스탬프를 감산에 있다는 비슷 $d
상기를 취득 .Ticks
하고, 분할하여 1e7
출력하는 총 실행 시간.
NB
좋아, 이것은 규칙 의 약간 구부러진 것 입니다. 처음 실행시 PowerShell은 기본 셸 프로필로로드되지 않으므로 다양한 스레드 작업을 위해 디스크에서 여러 .NET 어셈블리를로드해야합니다. 후속 실행은 어셈블리가 이미 메모리에 있으므로 제대로 작동합니다. 셸 창을 충분히 오래 유휴 상태로두면 PowerShell의 기본 제공 가비지 수집을 통해 해당 어셈블리를 모두 언로드 하여 다음 실행시 다시로드 할 때 시간이 오래 걸립니다. 이 문제를 해결할 방법이 확실하지 않습니다.
아래 실행에서 실행 시간에서 이것을 볼 수 있습니다. 새로운 쉘을 시작하고 골프 디렉토리로 이동하여 스크립트를 실행했습니다. 첫 번째 실행은 끔찍했지만 두 번째 실행 (즉각 실행)은 정상적으로 작동했습니다. 그런 다음 가비지 수집이 가능하도록 몇 분 동안 쉘을 유휴 상태로 두었다가 다시 실행 시간이 길어 지지만 후속 실행은 다시 정상적으로 작동합니다.
예제 실행
Windows PowerShell
Copyright (C) 2014 Microsoft Corporation. All rights reserved.
PS H:\> c:
PS C:\> cd C:\Tools\Scripts\golfing
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
63.232359
67.8403415
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
61.0809705
8.8991164
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
62.5791712
67.3228933
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
61.1303589
8.5939405
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
61.3210352
8.6386886
PS C:\Tools\Scripts\golfing>