Saturday, December 12, 2015

Linux Load编程竞赛 �C 后端技术 by Tim Yang



Linux Load编程竞赛 �C 后端技术 by Tim Yang
Linux load average的意思就是说 目前有ready的进程 但是cpu都在满,然后这个数是一分钟的平均值。公式:loadvg = tasks running + tasks waiting (for cores) + tasks blocked. 让CPU满是最简单的方式
为了更好理解load average,Tim某天在群征集一段代码使load average最高。于是乎,群友纷纷出手。

Shell版

#!/bin/sh
for((i=0;i<10;i++));do
{
for((j=0;j<1000000000000;j++));do echo '1'>>1; done
}&
done

Ruby

ruby -e "require 'thread';t = Mutex.new;10.times {fork {10000000.times{t.synchronize {x=Time.now}}}}"

Java版本2

public class Test {

   public static void main(String[] args) {
       for (int i = 0; i < 1000; i++) {
           new Thread() {
               @Override
               public void run() {
                   while (true) ;
               }
           }.start();
       }
   }
}

Java版本3

写两类线程,一类进行lockObject wait, 一类进行lockObject notifyall。 cpu上下文切换消耗 竞争激烈。Load能很高。
public class LoadHighDemo {

   public static void main(String[] args) throws Exception {
       LoadHighDemo demo = new LoadHighDemo();
       demo.runTest();
   }

   private void runTest() throws Exception {
       Object[] locks = new Object[5000];
       for (int i = 0; i < 5000; i++) {
           locks[i] = new Object();
           new Thread(new WaitTask(locks[i])).start();
           new Thread(new NotifyTask(locks[i])).start();
       }
   }

   class WaitTask implements Runnable {

       private Object lockObject = null;

       public WaitTask(Object obj) {
           lockObject = obj;
       }

       public void run() {
           while (true) {
               try {
                   synchronized (lockObject) {
                       lockObject.wait(new java.util.Random().nextInt(10));
                   }
               } catch (Exception e) {;
               }
           }
       }
   }

   class NotifyTask implements Runnable {

       private Object lockObject = null;

       public NotifyTask(Object obj) {
           lockObject = obj;
       }

       public void run() {
           while (true) {
               synchronized (lockObject) {
                   lockObject.notifyAll();
               }
               try {
                   Thread.sleep(new java.util.Random().nextInt(5));
               } catch (InterruptedException e) {
               }
           }
       }
   }
}

Python版

把5分钟 load avg 稳定在1024了
在本群感到了一种情怀。。。
#!/usr/bin/env python
import os
import sys
import time

def load_add_1():
time.sleep(30)
fd=os.open("test.txt",os.O_CREAT|os.O_RDWR|os.O_SYNC, 0644)
for i in xrange(10000*100):
os.write(fd," "*100)
sys.exit(0)

for i in xrange(8192):
if os.fork() == 0:
load_add_1()
此版本将load跑到8192
Read full article from Linux Load编程竞赛 �C 后端技术 by Tim Yang

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts