質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

Q&A

1回答

1237閲覧

1000分の1秒以上で処理できるプログラム言語

ma7ma7pipipi

総合スコア85

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

0グッド

0クリップ

投稿2017/06/24 07:28

javascriptやphp だと 1000分の1秒で設定できます。
これ以上の速度で処理できるプログラム言語ってありますか?
教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

例えばCの標準ライブラリー(というよりUnix系OSの機能といった方がよいのかも知れませんが・・・)にはマイクロ秒(10の-6乗秒)単位でsleepする関数usleepがあります。(最初のコードは結果が分かりにくかったので1回当たりの経過時間を表示するように直しました)

C

1#include <stdio.h> 2#include <unistd.h> 3#include <stdlib.h> 4#include <time.h> 5 6#define N 1000 7 8int main(int argc, const char* argv[]) { 9 int interval = atoi(argv[1]); 10 clock_t t0 = clock(); 11 for (int i = 0; i < N; i++) { 12 usleep(interval); 13 } 14 clock_t t1 = clock(); 15 printf("%f micro second\n", (double)(t1-t0) * 1E6 / CLOCKS_PER_SEC / N); 16 return 0; 17}

こんなものを作って実際にWindows 10 VirtualBox上のUbuntu 16.04LTS, gcc 5.4.0でやってみると...

$ ./a.out 1 9.435000 micro second $ ./a.out 10 9.090000 micro second $ ./a.out 20 9.980000 micro second

チャチなパソコンでやっているせいか、OSの制約のせいかわかりませんが、10マイクロ秒以下のインターバルの精度で処理することは実際には難しそうです。


蛇足:ライブラリーの仕様としてはJavaの標準ライブラリーにはナノ秒(10の-9乗秒)まで指定してsleepするメソッドが存在します。それを使って上記と同じUbuntu上のopenjdk 1.8.0_131でやってみますと・・・

java

1public class IntervalTest { 2 static final int N = 1000; 3 4 public static void main(String[] args) throws InterruptedException { 5 long interval = Long.parseLong(args[0]); 6 long ms = interval / 1_000_000; 7 int ns = (int)(interval % 1_000_000); 8 long t0 = System.nanoTime(); 9 for (int i = 0; i < N; i++) { 10 Thread.sleep(ms, ns); 11 } 12 long t1 = System.nanoTime(); 13 System.out.format("%,f nano secound%n", (double)(t1 - t0) / N); 14 } 15} 16 17結果==> 18$ java IntervalTest 1 191,303,507.728000 nano secound 20$ java IntervalTest 1000000 211,291,129.922000 nano secound 22$ java IntervalTest 2000000 232,313,371.724000 nano secound

どうやら自分が使っているバージョンのopenjdkのjvmは1ミリ秒程度での精度しかサポートされていないようです。

時間精度は言語やライブラリーの仕様だけでなく、プラットフォームに依存するようですね。

投稿2017/06/24 08:27

編集2017/06/25 00:26
KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問