LinuxおよびWindowsカーネル[終了]


9

私はLinuxで働いており、Windows 7では友達です。

私は、NetBeans、Eclipse、pgAdmin、およびその他のプログラムが、WindowsよりもLinuxの方が非常に高速に開く速度に驚きました。

LinuxとWindowsカーネルの主な違いは何ですか?

両方のマシンのハードウェア構成はまったく同じです。


1
おかしい、私の経験はまったく逆です- 私のすべてのPCで、WindowsのプログラムはLinux (特にWindows 7では、過去の使用状況に基づいてどのプログラムを開くかを推測し、メモリにプリロードします)よりも速くロードする傾向があります)。おそらく、彼のWindowsマシンはブロートウェアでいっぱいですか?ウイルス対策はWindowsのみですか?同じマシンでLinuxを実行してみましたか(ハードドライブの故障はロード時間に大きく影響します)
BlueRaja-ダニープフルフフト

@ BlueRaja-DannyPflughoeftコメントありがとうございます。質問で述べたように、両方のマシンのハードウェア構成は同じで、どちらにもWindows 7が付属していますが、私はLinuxユーザーです。彼のウィンドウは肥大化していません
Gerep

1
@ BlueRaja-DannyPflughoeft私は、Windowsに対するアンチウイルスが設定された後、それがはるかに遅くなるという興味深いことを見つけました。したがって、実際には、ブロートウェアは必要ありません。アンチウイルスをインストールするだけです。GNU / Linuxには1つは必要ありません(少なくともまだ)。この小さなことにより、パフォーマンスも大幅に向上しました。
Hi-Angel

回答:


8

これは私の推測ですが、すべてがコンパイルされると(バイナリデータに変換され、コンピュータが実行できる)、誰もソースコードを見ることができなくなる会社で働いていると、かなり怠惰になる傾向があると思います。それが機能する限りそれは問題ではないので。
Linuxはオープンソースであるため、必要に応じて誰でもソースコードを見ることができます。あなたが怠惰で、システムやある種のことを本当に遅くする本当にひどいコードを書いているなら、誰もがちょうど見たように、あなたの評判はそこに行きます。開発者とユーザーの両方。これがオープンソースの開発者が怠惰にならない理由の1つだと思います。

また、Windowsカーネルのコアが今日の状態になることを意図して(Linuxでもないが、古いビットを最適化するために努力して)作成されたことはなく、開発者は常に追加と追加を繰り返してきました。その上、コードが非常に不可解になり、だれもそれから何かを作ることができなくなるまで。厄介なコードの2つの特性は、多くの冗長性があり、2つのコード間のリンクがそれほど簡単に見られないことです。これにより、最適化を開始することすらできなくなります。単なる例(不可解なものではありません);

for (int i = 0; i < 20; i++)
{
    if (x == y)
    {
        if (z <= u)
        {
            goto banana;
        }
    }
}

上記の例は、はるかに効率的に実行できます。

for (int i = 0; (i < 20) && (x == y) && (z <= u); i++)
{
    banana ();
}

1
私はプログラマーの領域を信じています。現在のコンセンサスは、遅延および/またはずさんなコーディングがコンパイラーで十分に最適化されているということです。しかし、コンパイラーは、そこにあるかもしれない、そしてあなたの意図に関連する膨張やレガシーを助けることはできません。
Chris K

4
これらのコード例はどちらもほぼ確実に同じものにコンパイルされます(関数呼び出しとgotoを差し引いたものです)...
BlueRaja-Danny Pflughoeft

@ BlueRaja-DannyPflughoeft私は知っていますが、それを説明する簡単な例が必要でした。
RobinJ

5

まだ言及されていないもう1つの大きな問題は、Linuxのファイルシステムが優れていることです。小さなファイルでのNTFSのパフォーマンスはそれほど優れていません。ext3が優れており、ext4ははるかに優れています。その理由については、別の質問で興味深い推測があります。

プログラムを開いているとき、起動時間のかなりの部分がディスクから小さなファイルの束を読み込んでいるので、それをすばやく実行するファイルシステムを用意することは非常に重要です。


4

これは私の意見ですが、GNU / LinuxシステムがWindowsより高速であり、すべてがカーネルに関連しているわけではないのには、さまざまな理由があると思います。

  • RobinJによって説明された理由があることは明らかですが、ソフトウェアがオープンソースである場合、コードはより効率的に記述される傾向があることは明らかです
  • Linuxは非常に最適化されたコンポーネントを使用します。たとえば、CPU使用率を最大化する傾向がある非常に最適化されたスケジューラーを使用します。
  • Linuxシステムはメモリの断片化の影響を受けにくい
  • Linuxシステムはメインメモリをより適切に使用し、通常はキャッシュを大量に使用する傾向がありますが、Windowsシステムは代わりに仮想メモリを大量に使用する傾向があります
  • Linuxカーネルは継続的に更新され、通常は不要な部分が削除されますが、Linuxカーネルは「巨大で肥大化」しているとLinus Torvalds氏は言いますが、反対にNTカーネルの更新は通常、既存のものの上に構築されます。

3

カーネルだけでは解決できないと思います。Windows 7は、Windowsが許容範囲内であると考えるほど応答性が高かったのは初めてです。

速度差の多くは、ソフトウェアエンジニアリングに関する@RobinJの考えに関連していると思います。Windowsのすべて*は、何らかのMicrosoftフレームワークまたは別のフレームワークを介してMSDNで構築されています。これは実際には、ビッグビジネスがマイクロソフトをどのように愛しているかに関係しています。マイクロソフトは、さまざまなプログラム/スイート/テクノロジが互いに対話するのを支援することをすべて目的としています。

次に...開発者が必要な要素を簡単にカバーできるようにする(そして、ホイールを再発明しない)ために、Microsoftは、メーカーがMicrosoft Visual C ++ 2008 Redistributableのようなプリコンパイル済みライブラリをバンドルおよび/または要求することを許可しています。または、.Net4.0、MSSQL 2005、悪心。新しいソフトウェアを使用するために、開発者が使用および構築でき、エンドユーザーがWindowsコンピューターにインストールすることを要求できる10年相当のパッケージがあります。

したがって、プログラムZyzzyxをロードして実行するには、1つ以上のMSDN再配布可能ライブラリが存在し、実行されている必要があります。これらのライブラリは、プログラムがOSと対話する方法を決定します。

簡単に言うと、何十年にもわたるソフトウェア間のWindowの意図的な互換性により、Windowは肥大化し、場合によっては同等のLinuxシステムよりも遅くなると私は考えています。また、私はWindows用にビジュアルソフトウェアを開発しましたが、Linux用には開発していません... GTK、Qt、Pyなどではないので、Linuxの肥大化が少ないという私の仮定は、それだけです。

追加のために編集:さらに、FOSSソフトウェアには常に改善の余地があるため、GTK-2005とGTK-2008が同じコンピューター上にあるのではなく、GTKは時間の経過とともに改善されますが、Microsoftは常にそうします。

* -はい、例外はあります、きっと。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.