分類
發燒車訊

I/O多路復用模型

背景

在文章中提到了五種I/O模型,其中前四種:阻塞模型、非阻塞模型、信號驅動模型、I/O復用模型都是同步模型;還有一種是異步模型。

想寫一個系列的文章,介紹從I/O多路復用到異步編程和RPC框架,整個演進過程,這一系列可能包括:

  1. Reactor和Proactor模型
  2. 為什麼需要異步編程
  3. enable_shared_from_this用法分析
  4. 網絡通信庫和RPC

為什麼有多路復用?

多路復用技術要解決的是“通信”問題,解決核心在於“同步事件分離器”(de-multiplexer),linux系統帶有的分離器select、poll、epoll網上介紹的比較多,大家可以看看這篇介紹的不錯的文章:。通信的一方想要知道另一方的狀態(以決定自己做什麼),有兩種方法: 一是輪詢,二是消息通知。

輪詢

輪詢的一種典型的實現可能是這樣的:當然這裏的epoll_wait()也可以使用poll()或者select()替換。

whiletrue) {
    active_stream[] = epoll_wait(epollfd)
    for i in active_stream[] {
        read or write till
    }
}

輪詢方式主要存在以下不足:

  • 增加系統開銷。無論是任務輪詢還是定時器輪詢都需要消耗對應的系統資源。
  • 無法及時感知設備狀態變化。在輪詢間隔內的設備狀態變化只有在下次輪詢時才能被發現,這將無法滿足對實時性敏感的應用場合。
  • 浪費CPU資源。無論設備是否發生狀態改變,輪詢總在進行。在實際情況中,大多數設備的狀態改變通常不會那麼頻繁,輪詢空轉將白白浪費CPU時間片。

消息通知

其實現方式通常是: “阻塞-通知”機制。阻塞會導致一個任務(task_struct,進程或者線程)只能處理一個”I/O流”或者類似的操作,要處理多個,就要多個任務(需要多個進程或線程),因此靈活性上又不如輪詢(一個任務足夠),很矛盾。

 

select、poll、epoll對比

矛盾的根源就是”一”和”多”的矛盾: 希望一個任務處理多個對象,同時避免處理阻塞-通知機制的內部細節。解決方案是多路復用(muliplex)。多路復用有3種基本方案,select()/poll()/epoll(),都是來解決這一矛盾的。

  • 通知代理: 用戶把需要關心的對象註冊給select()/poll()/epoll()函數。
  • 一對多: 所有的被關心的對象,只要有一個對象有了通知事件,select()/poll()/epoll()就會結束阻塞狀態。
  • 方便性: 用戶(程序員)不用再關心如何阻塞和被通知,以及哪些情況下會有通知產生。這件事情已經由上述幾個系統調用做了,用戶只需要實現”通知來了我該做什麼”。

 

那麼上面3個系統調用的區別是什麼呢?
第一個select(),結合了輪詢和阻塞兩種方式,沒有問題,每次有一個對象事件發生的時候,select()只是知道有事件發生了,具體是哪個對象發生的,不知道,需要從頭到尾輪詢一遍,複雜度是O(n)。poll函數相對select函數變化不大,只是提升了最大的可輪詢的對象個數。epoll函數把時間複雜度降到O(1)。

 

為什麼select慢而epoll效率高?
select()之所以慢,有幾個原因: select()的參數是一個FD數組,意味着每次select調用,都是一次新的註冊-阻塞-回調,每次select都要把一個數組從用戶空間拷貝到內核空間,內核檢測到某個對象狀態變化並寫入后,再從內核空間拷貝回用戶空間,select再把這個數組讀取一遍,並返回。這個過程非常低效。

epoll的解決方案相當於是一種對select()的算法優化: 它把select()一個函數做的事情分解成了3步,首先epoll_create()創建一個epollfd對象(相當於一個池子),然後所有被監聽的fd通過epoll_ctrl()註冊到這個池子,也就是為每個fd指定了一個內部的回調函數(這樣,就沒有了每次調用時的來回拷貝,用戶空間的數組到內核空間只有這一次拷貝)。epoll_wait阻塞等待。在內核態有一個和epoll_wait對應的函數調用,把就緒的fd,填入到一個就緒列表中,而epoll_wait讀取這個就緒列表,做到了快速返回(O(1))。

詳細的對比可以參考select、poll、epoll之間的區別總結:

 

有了上面的原理介紹,這裏舉例來說明下epoll到底是怎麼使用的,加深理解。舉兩個例子:

一個是比較簡單的父子進程通信的例子,單個小程序,不需要跑多個應用實例,不需要用戶輸入。
一個是比較實戰的socket+epoll,畢竟現實案例中哪有兩個父子進程間通訊這麼簡單的應用場景。

有了多路復用,難道還不夠?

有了I/O復用,有了epoll已經可以使服務器併發幾十萬連接的同時,維持高TPS了,難道這還不夠嗎?答案是,技術層面足夠了,但在軟件工程層面卻是不夠的。例如,總要有個for循環去調用epoll,總來處理epoll的返回,這是每次都要重複的工作。for循環體裏面寫什麼—-通知返回之後,做事情的程序最好能以一種回調的機制,提供一個編程框架,讓程序更有結構一些。另一方面,如果希望每個事件通知之後,做的事情能有機會被代理到某個線程裏面去單獨運行,而線程完成的狀態又能通知回主任務,那麼”異步”的進制就必須被引入。

所以,還有兩個問題要解決,一是”編程框架”,一是”異步”。我們先看幾個目前流行的框架,大部分框架已經包含了某種異步的機制。我們接下來的篇章將介紹“編程框架”和“異步I/O模型”。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

分類
發燒車訊

MySQL 5.7 – 通過 BINLOG 恢複數據

日常開發,運維中,經常會出現誤刪數據的情況。誤刪數據的類型大致可分為以下幾類:

  • 使用 delete 誤刪行
  • 使用 drop table 或 truncate table 誤刪表
  • 使用 drop database 語句誤刪數據庫
  • 使用 rm 命令誤刪整個 MySQL 實例。

不同的情況,都會有其優先的解決方案:

  • 針對誤刪行,可以通過 Flashback 工具將數據恢復
  • 針對誤刪表或庫,一般採用通過 BINLOG 將數據恢復。
  • 而對於誤刪 MySQL 實例,則需要我們搭建 HA 的 MySQL 集群,並保證我們的數據跨機房,跨城市保存。

本篇主要討論的內容是誤刪表或者庫,會先介紹有關 BINLOG 的操作命令,然後會對誤刪表的這種情況進行實際的模擬。

BINLOG 常見操作命令

BINLOG 的查詢方式一般分為兩種,一種是進入 MySQL 控制台進行查詢,另一種是通過 MySQL 提供的工具 mysqlbinlog 進行查詢,兩者的不同會在下面介紹。

通過 MySQL Cli 查詢 BINLOG 信息

在 cli 中,常見的命令如下:

# 查詢 BINLOG 格式
show VARIABLES like 'binlog_format';

# 查詢 BINLOG 位置
show VARIABLES like 'datadir';

# 查詢當前數據庫中 BINLOG 名稱及大小
show binary logs;

# 查看 master 正在寫入的 BINLOG 信息
show master status\G;

# 通過 offset 查看 BINLOG 信息
show BINLOG events in 'mysql-bin.000034' limit 9000,  10;

# 通過 position 查看 binlog 信息
show BINLOG events in 'mysql-bin.000034' from 1742635 limit 10;

使用 show BINLOG events 的問題:

  • 使用該命令時,如果當前 binlog 文件很大,而且沒有指定 limit,會引發對資源的過度消耗。因為 MySQL 客戶端需要將 binlog 的全部內容處理,返回並显示出來。為了防止這種情況,mysqlbinlog 工具是一個很好的選擇。

通過 mysqlbinlog 查詢 BINLOG 信息

在介紹 mysqlbinlog 工具使用前,先來看下 BINLOG 文件的內容:

# 查詢 BINLOG 的信息
mysqlbinlog  --no-defaults mysql-bin.000034 | less
# at 141
#100309  9:28:36 server id 123  end_log_pos 245
  Query thread_id=3350  exec_time=11  error_code=0
  • at 表示 offset 或者說事件開始的起始位置
  • 100309 9:28:36 server id 123 表示 server 123 開始執行事件的日期
  • end_log_pos 245 表示事件的結束位置 + 1,或者說是下一個事件的起始位置。
  • exec_time 表示在 master 上花費的時間,在 salve 上,記錄的時間是從 Master 記錄開始,一直到 Slave 結束完成所花費的時間。
  • rror_code=0 表示沒有錯誤發生。

在大致了解 binlog 的內容后,mysqlbinlog 的用途有哪些?:

  • mysqlbinlog 可以作為代替 cli 讀取 binlog 的工具。
  • mysqlbinlog 可以將執行過的 SQL 語句輸出,用於數據的恢復或備份。

查詢 BINLOG 日誌:

# 查詢規定時候后發生的 BINLOG 日誌
mysqlbinlog --no-defaults --base64-output=decode-rows -v  --start-datetime  "2019-11-22 14:00:00" --database sync_test  mysql-bin.000034 | less

導出 BINLOG 日誌,用於分析和排查 sql 語句:

mysqlbinlog --no-defaults --base64-output=decode-rows -v  --start-datetime  "2019-11-22 14:00:00" --database sync_test  mysql-bin.000034 > /home/mysql_backup/binlog_raw.sql

導入 BINLOG 日誌

# 通過 BINLOG 進行恢復。
mysqlbinlog --start-position=1038 --stop-position=1164 --database=db_name  mysql-bin.000034 | mysql  -u cisco -p db_name

# 通過 BINLOG 導出的 sql 進行恢復。
mysql -u cisco -p db_name < binlog_raw.sql.sql

mysqlbinlog 的常用參數:

  • --database 僅僅列出配置的數據庫信息
  • --no-defaults 讀取沒有選項的文件, 指定的原因是由於 mysqlbinlog 無法識別 BINLOG 中的 default-character-set=utf8 指令
  • --offset 跳過 log 中 N 個條目
  • --verbose 將日誌信息重建為原始的 SQL 陳述。
    • -v 僅僅解釋行信息
    • -vv 不但解釋行信息,還將 SQL 列類型的註釋信息也解析出來
  • --start-datetime 显示從指定的時間或之後的時間的事件。
    • 接收 DATETIME 或者 TIMESTRAMP 格式。
  • --base64-output=decode-rows 將 BINLOG 語句中事件以 base-64 的編碼显示,對一些二進制的內容進行屏蔽。
    • AUTO 默認參數,自動显示 BINLOG 中的必要的語句
    • NEVER 不會显示任何的 BINLOG 語句,如果遇到必須显示的 BINLOG 語言,則會報錯退出。
    • DECODE-ROWS 显示通過 -v 显示出來的 SQL 信息,過濾到一些 BINLOG 二進制數據。

MySQL Cli 和 mysqlbinlog 工具之間的比較

如果想知道當前 MySQL 中正在寫入的 BINLOG 的名稱,大小等基本信息時,可以通過 Cli 相關的命令來查詢。

但想查詢,定位,恢復 BINLOG 中具體的數據時,要通過 mysqlbinlog 工具,因為相較於 Cli 來說,mysqlbinlog 提供了 --start-datetime--stop-position 等這樣更為豐富的參數供我們選擇。這時 Cli 中 SHOW BINLOG EVENTS 的簡要語法就變得相形見絀了。

使用 BINLOG 恢複數據

恢復的大致流程如下:

  1. 會創建數據庫和表,並插入數據。
  2. 誤刪一條數據。
  3. 繼續插入數據。
  4. 誤刪表。
  5. 最後將原來以及之後插入的數據進行恢復。

準備數據

準備數據庫,表及數據:

# 創建臨時數據庫
CREATE DATABASE IF NOT EXISTS test_binlog default charset utf8 COLLATE utf8_general_ci; 


# 創建臨時表
CREATE TABLE `sync_test` (`id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


# 添加數據
insert into sync_test (id, name) values (null, 'xiaoa');
insert into sync_test (id, name) values (null, 'xiaob');
insert into sync_test (id, name) values (null, 'xiaoc');

# 查看添加的數據
select * from sync_test;

刪除表或者數據

誤刪操作:

# 刪除 name=xiaob 的數據
delete from sync_test where id=3

# 插入幾條數據
insert into sync_test (id, name) values (null, 'xiaod');
insert into sync_test (id, name) values (null, 'xiaoe');
insert into sync_test (id, name) values (null, 'xiaof');

# 刪除表
DROP TABLE sync_test;

數據的恢復

在執行數據恢復前,如果操作的是生產環境,會有如下的建議:

  • 使用 flush logs 命令,替換當前主庫中正在使用的 binlog 文件,好處如下:
    • 可將誤刪操作,定位在一個 BINLOG 文件中,便於之后的數據分析和恢復。
    • 避免操作正在被使用的 BINLOG 文件,防止發生意外情況。
  • 數據的恢復不要在生產庫中執行,先在臨時庫恢復,確認無誤后,再倒回生產庫。防止對數據的二次傷害。

通常來說,恢復主要有兩個步驟:

  1. 在臨時庫中,恢復定期執行的全量備份數據。
  2. 然後基於全量備份的數據點,通過 BINLOG 來恢復誤操作和正常的數據。

使用 BINLOG 做數據恢復前:

# 查看正在使用的 Binlog 文件
show master status\G;
# 显示結果是: mysql-bin.000034

# 執行 flush logs 操作,生成新的 BINLOG
flush logs;

# 查看正在使用的 Binlog 文件
show master status\G;
# 結果是:mysql-bin.000035

確定恢複數據的步驟:

這裏主要是有兩條誤刪的操作,數據行的誤刪和表的誤刪。有兩種方式進行恢復。

  • 方式一:首先恢復到刪除表操作之前的位置,然後再單獨恢復誤刪的數據行。
  • 方式二:首先恢復到誤刪數據行的之前的位置,然後跳過誤刪事件再恢複數據表操作之前的位置。

這裏採用方式一的方案進行演示,由於是演示,就不額外找一個臨時庫進行全量恢復了,直接進行操作。

查詢創建表的事件位置和刪除表的事件位置

#  根據時間確定位置信息
mysqlbinlog --no-defaults --base64-output=decode-rows -v  --start-datetime  "2019-11-22 14:00:00" --database test_binlog  mysql-bin.000034 | less

創建表的開始位置:

刪除表的結束位置:

插入 name=’xiaob’ 的位置:

# 根據位置導出 SQL 文件
mysqlbinlog --no-defaults --base64-output=decode-rows -v --start-position "2508132" --stop-position "2511004" --database test_binlog  mysql-bin.000034 > /home/mysql_backup/test_binlog_step1.sql
 
 
mysqlbinlog --no-defaults --base64-output=decode-rows -v --start-position "2508813" --stop-position "2509187" --database test_binlog  mysql-bin.000034 > /home/mysql_backup/test_binlog_step2.sql
 

# 使用 mysql 進行恢復
mysql -u cisco -p < /home/mysql_backup/test_binlog_step1.sql
mysql -u cisco -p < /home/mysql_backup/test_binlog_step2.sql

MySQL 5.7 中無論是否打開 GTID 的配置,在每次事務開啟時,都首先會出 GTID 的一個事務,用於并行複製。所以在確定導出開始事務位置時,要算上這個事件。

在使用 –stop-position 導出時,會導出在指定位置的前一個事件,所以這裏要推后一個事務。

對於 DML 的語句,主要結束位置要算上 COMMIT 的位置。

總結

在文章開始時,我們熟悉了操作 BINLOG 的兩種方式 CLI 和 mysqlbinlog 工具,接着介紹了其間的區別和使用場景,對於一些大型的 BINLOG 文件,使用 mysqlbinlog 會更加的方便和效率。並對 mysqlbinlog 的一些常見參數進行了介紹。

接着通過使用 mysqlbinlog 實際模擬了數據恢復的過程,並在恢複數據時,提出了一些需要注意的事項,比如 flush logs 等。

最後在恢複數據時,要注意 start-positionend-position 的一些小細節,來保證找到合適的位置。

參考

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

分類
發燒車訊

高性能網絡通訊原理

目錄

高性能網絡通訊原理

前言

本來想對netty的源碼進行學習和探究,但是在寫netty之前許多底層的知識和原理性的東西理解清楚,那麼對學習網絡通訊框架的效果則會事半功倍。

本篇主要探討高性能網絡通訊框架的一些必要知識和底層操作系統相關的原理。在探討如何做之前,我們先討論下為什麼要做。

隨着互聯網的高速發展,用戶量呈指數形式遞增,從原來的PC普及到現在的移動設備普及。用戶量都是千萬甚至億為單位計算,尤其是實時通訊軟件,在線實時互動的應用出現,在線用戶數從原來的幾十上百到後來的上萬甚至上千萬。單台服務的性能瓶頸和網絡通訊瓶頸慢慢呈現。應用架構從單應用到應用數據分離,再到分佈式集群高可用架構。單台服務的性能不足可以通過構建服務集群的方式水平擴展,應用性能瓶頸被很好的解決。但是橫向擴展帶來了直接的經濟成本。

一個高性能的網絡通訊框架從硬件設備到操作系統內核以及用戶模式都需要精心設計。只要有任何地方有疏漏都會出現短板效應。

I/O訪問

當我們在讀取socket數據時,雖然我們在代碼僅僅是調用了一個Read操作,但是實際操作系統層面做了許多事情。首先操作系統需要從用戶模式轉換為內核模式,處理器會通過網卡驅動對網卡控制器進行操作,網卡控制器則控制網卡。

處理器不會直接操控硬件。

為了提高CPU利用率,I/O訪問方式也發生了很大變化。

  1. 早期的CPU直接控制外圍設備,後來增加了控制器或I/O模塊。處理器開始將I/O操作從外部設備接口分離出來。處理器通過向I/O模塊發送命令執行I/O指令。然而當I/O操作完成時並不會通知處理器I/O,因此處理器需要定時檢查I/O模塊的狀態,它會進行忙等待,因此效率並不高。
  2. 後來CPU支持了中斷方式,處理器無需等待執行I/O操作,通過中斷控制器產生中斷信號通知I/O操作完成,大大的提高了處理器利用效率。這時的I/O操作使用特定的in/out(I/O端口)指令或直接讀寫內存的方式(內存映射I/O)。但是這些方式都需要處理器使用I/O寄存器逐個內存單元進行訪問,效率並不高,在I/O操作時需要消耗的CPU時鐘周期。
  3. 為了提高效率,後來增加了DMA控制器,它可以模擬處理起獲得內存總線控制權,進行I/O的讀寫。當處理器將控制權交給DMA控制器之後,DMA處理器會先讓I/O硬件設備將數據放到I/O硬件的緩衝區中,然後DMA控制器就可以開始傳輸數據了。在此過程中處理器無需消耗時鐘周期。當DMA操作完成時,會通過中斷操作通知處理器。

I/O訪問的發展趨勢是盡可能減少處理器干涉I/O操作,讓CPU從I/O任務中解脫出來,讓處理器可以去做其他事情,從而提高性能。

對於I/O訪問感興趣的同學可以看《操作系統精髓與設計原理(第5版)》第十一章I/O管理相關內容和《WINDOWS內核原理與實現》第六章I/O論述相關內容

I/O模型

在討論I/O模型之前,首先引出一個叫做C10K的問題。在早期的I/O模型使用的是同步阻塞模型,當接收到一個新的TCP連接時,就需要分配一個線程。因此隨着連接增加線程增多,頻繁的內存複製,上下文切換帶來的性能損耗導致性能不佳。因此如何使得單機網絡併發連接數達到10K成為通訊開發者熱門的討論話題。

同步阻塞

前面提到,在最原始的I/O模型中,對文件設備數據的讀寫需要同步等待操作系統內核,即使文件設備並沒有數據可讀,線程也會被阻塞住,雖然阻塞時不佔用CPU始終周期,但是若需要支持併發連接,則必須啟用大量的線程,即每個連接一個線程。這樣必不可少的會造成線程大量的上下文切換,隨着併發量的增高,性能越來越差。

select模型/poll模型

為了解決同步阻塞帶來線程過多導致的性能問題,同步非阻塞方案產生。通過一個線程不斷的判斷文件句柄數組是否有準備就緒的文件設備,這樣就不需要每個線程同步等待,減少了大量線程,降低了線程上下文切換帶來的性能損失,提高了線程利用率。這種方式也稱為I/O多路復用技術。但是由於數組是有數組長度上限的(linux默認是1024),而且select模型需要對數組進行遍歷,因此時間複雜度是\(O_{(n)}\)因此當高併發量的時候,select模型性能會越來越差。

poll模型和select模型類似,但是它使用鏈表存儲而非數組存儲,解決了併發上限的限制,但是並沒有解決select模型的高併發性能底下的根本問題。

epoll模型

在linux2.6支持了epoll模型,epoll模型解決了select模型的性能瓶頸問題。它通過註冊回調事件的方式,當數據可讀寫時,將其加入到通過回調方式,將其加入到一個可讀寫事件的隊列中。這樣每次用戶獲取時不需要遍歷所有句柄,時間複雜度降低為\(O_{(1)}\)。因此epoll不會隨着併發量的增加而性能降低。隨着epoll模型的出現C10K的問題已經完美解決。

異步I/O模型

前面講的幾種模型都是同步I/O模型,異步I/O模型指的是發生數據讀寫時完全不同步阻塞等待,換句話來說就是數據從網卡傳輸到用戶空間的過程時完全異步的,不用阻塞CPU。為了更詳細的說明同步I/O與異步I/O的區別,接下來舉一個實際例子。

當應用程序需要從網卡讀取數據時,首先需要分配一個用戶內存空間用來保存需要讀取的數據。操作系統內核會調用網卡緩衝區讀取數據到內核空間的緩衝區,然後再複製到用戶空間。在這個過程中,同步阻塞I/O在數據讀取到用戶空間之前都會被阻塞,同步非阻塞I/O只知道數據已就緒,但是從內核空間緩衝區拷貝到用戶空間時,線程依然會被阻塞。而異步I/O模型在接收到I/O完成通知時,數據已經傳輸到用戶空間。因此整個I/O操作都是完全異步的,因此異步I/O模型的性能是最佳的。

在我的另一篇文章對windows操作系統I/O原理做了簡要的敘述,感興趣的同學可以看下。

I/O線程模型

從線程模型上常見的線程模型有Reactor模型和Proactor模型,無論是哪種線程模型都使用I/O多路復用技術,使用一個線程將I/O讀寫操作轉變為讀寫事件,我們將這個線程稱之為多路分離器。

對應上I/O模型,Reacor模型屬於同步I/O模型,Proactor模型屬於異步I/O模型。

Reactor模型

在Reactor中,需要先註冊事件就緒事件,網卡接收到數據時,DMA將數據從網卡緩衝區傳輸到內核緩衝區時,就會通知多路分離器讀事件就緒,此時我們需要從內核空間讀取到用戶空間。

同步I/O採用緩衝I/O的方式,首先內核會從申請一個內存空間用於存放輸入或輸出緩衝區,數據都會先緩存在該緩衝區。

Proactor模型

Proactor模型,需要先註冊I/O完成事件,同時申請一片用戶空間用於存儲待接收的數據。調用讀操作,當網卡接收到數據時,DMA將數據從網卡緩衝區直接傳輸到用戶緩衝區,然後產生完成通知,讀操作即完成。

異步I/O採用直接輸入I/O或直接輸出I/O,用戶緩存地址會傳遞給設備驅動程序,數據會直接從用戶緩衝區讀取或直接寫入用戶緩衝區,相比緩衝I/O減少內存複製。

總結

本文通過I/O訪問方式,I/O模型,線程模型三個方面解釋了操作系統為實現高性能I/O做了哪些事情,通過提高CPU使用效率,減少內存複製是提高性能的關鍵點。

參考文檔

  1. 《操作系統精髓與設計原理(第5版)》
  2. 《WINDOWS內核原理與實現》

微信掃一掃二維碼關注訂閱號傑哥技術分享
出處:
作者:傑哥很忙
本文使用「CC BY 4.0」創作共享協議。歡迎轉載,請在明顯位置給出出處及鏈接。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

分類
發燒車訊

馬斯克遇程咬金,第一台電動卡車不姓特斯拉

馬斯克近日才剛在推特上表示,近期將推出全電動的半掛式卡車,令市場相當的看好,然而如今第一個達成創舉的廠商,卻不是特斯拉。

特斯拉將在9 月發表載貨用的全電動半掛卡車(Tesla Semi)原型,雖然業界一直在質疑其負載及續航力,不過若成功的話也等於是對市場投下一個震撼彈。畢竟相較汽柴油車的引擎,電動車的維護成本較低,假如電池成本也持續降低,在配合環保法規的情況下,相當的有市場。

不過如今一家原本專做柴油及天然氣發動機的龍頭廠商康明斯(Cummins)推出了相當於第7 級重型卡車的電動車,其配備了先進的140 kWh 的電池組,並預計將於2019 年開始交付給客戶。這台卡車被命名為AEOS,應該是取意於希臘神話中替太陽神阿波羅拉車的火焰飛馬。

 

AEOS in motion: Raw footage of our first fully electric heavy duty demonstration Urban Hauler Tractor.

— Cummins Inc. (@Cummins)

 

且Cummins 也能僅提供動力系統總成,將可應用於電動巴士等其他車型。電動巴士製造商 Proterra 的總裁Ryan Popple 指出,這是相當令人震驚的消息,是邁向完全電氣化交通的一大步,隨著各國正積極修訂法規鼓勵電動車,目前這方面的市場相當大,巴士及校車等訂單幾乎滿載。

據Cummins 表示,這輛電動卡車動力總成與一般柴油車相當,可牽引4,4000 磅的重量,近20 噸,單次充電可行駛約100 英里,並可加掛額外的電池組將行程擴展到300 英里,還可安裝太陽能電池板,還有再生制軔(Regenerative brake)及低阻力輪胎的研發將可望進一步提昇其行駛距離。目前的充電站設計,將可在1 小時內充滿,而Cummins 的目標是希望,能夠在2020 年以前,將充電時間縮短到20 分鐘。

不過Cummins 的執行長Thomas Linebarger 也坦言,依目前電池科技的進展,第7 級重型卡車的應用已是極限,第8 級的重型拖車目前仍遙遙無期。所以也將推出同型的高效率柴油引擎及混合動力車款。儘管有所突破,但目前電動系統仍較適用於商用卡車,Cummins 一舉超越特斯拉也同樣宣示了將進軍此市場的意圖。

當然特斯拉就算被搶得頭籌,也不代表無法反擊,據之前透露的消息,其產品可能將定位於行程達200-300 英里的運輸範圍,性能可能比AEOS 還強。但Cummins 此舉或許更大意義在於強調,他們這些傳統龍頭,儘管受到挑戰,仍有相當強的底蘊,在不同動力系統的研發上,有超乎市場想像的潛力。

(合作媒體:。圖片出處:)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

分類
發燒車訊

孫宇晨回顧區塊鏈歷程:不走熱點走心

  10 月 26 日上午,波場創始人孫宇晨發布微博回顧其投身區塊鏈過程,在經歷了王小川口水仗、巴菲特天價午餐之後,孫宇晨稱不走熱點說些走心的話,“2013 年回國推廣區塊鏈,那時慘到連區塊鏈這個詞都不存在,六年了,我們沒成先烈,還活着。對於區塊鏈造福每个中國人的未來,即便在公司即將倒閉的夜晚,我都從未懷疑。”

  在孫宇晨看來,區塊鏈是互聯網的 2.0 形態,互聯網的 1.0 形態是信息網絡,而 2.0 形態是價值網絡。互聯網第一步傳播信息,就如同今天的互聯網,第二步傳播價值,價值包括通證:貨幣、股票、債券等所有人類的價值所有物。

  在長文最後,孫宇晨表示:“互聯網已經到了下半場,區塊鏈卻還沒開始預備賽。對於即將打響的預備賽,我想說,我準備好了!”

  以下為孫宇晨微博全文:

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

分類
發燒車訊

首發!Apache Flink乾貨合集打包好了,速來下載

  最近的一份市場調查報告显示,Apache Flink 是 2018 年開源大數據生態中發展“最快”的引擎,和 2017 年相比增長了 125% 。為了讓大家更為全面地了解 Flink,我們製作了一本电子乾貨合集:《不僅僅是流計算:Apache Flink 實踐》,融合了 Apache Flink 在國內各大頂級互聯網公司的大規模實踐,希望對大家有所幫助。

  在這本合集里,你可以了解到:

  Flink 如何為整個阿里集團平穩度過雙十一立下汗馬功勞?

  如何為滿足滴滴極為複雜的業務需求提供簡單直觀的 API 支持?

  如何在字節跳動逐步取代原有的 JStorm 引擎,成為公司內部流式數據處理的唯一標準?

《不僅僅是流計算:Apache Flink 實踐》目錄一覽

  下載地址:

  https://102.alibaba.com/downloadFile.do?file=1543409877893%2fApache+Flink.pdf

  Apache Flink 已經被業界公認是最好的流計算引擎。然而 Flink 的計算能力不僅僅局限於做流處理。Apache Flink 的定位是一套兼具流、批、機器學習等多種計算功能的大數據引擎。在最近的一段時間,Flink 在批處理以及機器學習等諸多大數據場景都有長足的突破。此次專刊,旨在對 Flink 在大數據智能計算方面做一些簡要的介紹。後續我們還將發布更多關於 Flink 在新場景的應用乾貨。

  下面,我們邀請阿里資深技術專家、Apache Flink Committer 王紹翾老師(花名“大沙”),帶領大家走進 Flink 的世界。

  在全面介紹 Flink 的新進展之前,我先來介紹一些大數據和人工智能計算的背景。大數據計算的種類非常多,比較典型的,且被大規模使用的主要是 3 種類型:

  • 批計算

  • 流計算

  • 交互式分析計算

  批計算的特點是要計算的數據量比較大,但是往往對延遲不是特別敏感。流計算對延遲的要求非常高,這些作業的查詢 query 往往是固定的。因此流計算作業往往需要提前調度起來,一旦數據到來就可以做快速的處理,節省了調度的開銷。

  最後一種是交互式分析,這種類型的大數據計算的特點是用戶的查詢 query 是不固定的,這些 query 往往是由用戶隨機的發出的。雖然查詢不固定,在這種場景下,用戶對查詢的返回時間是有一定的要求的,這個時間介於批處理和流處理之間,越快越好,最好能做到秒級。

  人工智能計算的種類很多,但是整體架構大多和上圖所描述的類似。一個常見的 ML pipeline 通常涉及一系列的數據預處理、特徵提取和轉換、模型訓練以及驗證。如果驗證后的效果符合預期,就可以將模型推到線上服務。如果不符合預期,算法工程師就需要調整算法模型或者參數,然後再做一次模型的訓練和驗證,直到對結果滿意后,再將訓練好的模型推上線服務。整個計算過程可以是對一個確定大小的數據按照批計算模式計算,也可以接入實時數據按照流計算模式進行計算。上面這個 pipeline 是人工智能計算最基礎的流程,如果算法工程師對數據以及業務特點非常熟悉,他們就能設計出合理的算法模型和參數。但是往往更常見的情況是,算法工程師需要分析工具幫助他們理解數據。只有在很好地理解了數據特點之後,才能提取出更有用的特徵,設計出更好的模型。因此,如下圖所示,做好人工智能計算,不可或缺的一部分就是交互式分析。有了交互式分析,算法工程師可以對數據做各種 ad-hoc query,從而幫助他們更好地理解數據。

  綜上所述,可以看出人工智能計算和大數據計算是密不可分的。雖然人工智能計算變得越來越炙手可熱,人們越來越多的提及人工智能而不是大數據,但是我們不能忘記,人工智能計算的基礎是大數據計算,沒有大數據計算提供算力和功能,人工智能計算只能停留在紙上談兵的階段。接下來,我把基於大數據計算的人工智能計算簡稱為“大數據智能計算”。

  大數據和 AI 全景–2018(來源:http://mattturck.com/bigdata2018/)

  那麼怎麼來搭建一套大數據智能計算系統呢?http://mattturck.com 收集了所有大數據和 AI 的軟件和平台。上面提到的每一種大數據計算場景都有好幾種軟件的選擇,調研和選型這些軟件本身就是一項巨大的工程。即使最後為每一套場景都選型了一種軟件,那麼後期的開發迭代和運維也難做到高效。因為每一套軟件都需要專門的開發和運維團隊負責,無論是在人力還是機器資源上都不能橫向打通,勢必會造成浪費。

  因此,阿里巴巴一直在思考是否可能有一套計算引擎解決如上的所有問題。經過仔細的選型,我們選擇了 Apache Flink,並圍繞着 Flink 在打造一款通用計算引擎。Flink 已經被業界公認是最好的流計算引擎。

  它所具有的低延遲、高吞吐、保障 Exactly-once 的計算模式,使得它具有金融級的大數據處理能力。在批處理方面,基於流式的 flow 來處理批數據有着潛在的優勢和擴展性。阿里巴巴利用 Flink 的天然特性,做了若干批計算方面的優化,使得 Flink 也成為了一款性能卓越的批計算引擎。在人工智能和交互式分析方面,我們也在逐步地完善 Flink 的易用性,生態,以及性能。另外,不得不提的是,Flink 的流處理架構還天然的適合於正在快速崛起的本質更像流計算的 IoT 的場景。

  Flink 的社區和生態一直在壯大。在流計算和批計算等場景慢慢使用 Flink 成為主流的同時,我們期望設計和推廣出更多更完善的批流融合的場景。所有對 Lamda 架構有訴求的應用應該都可以用 Flink 完美的解決。早期的 Lamda 架構的設計也許很快會成為歷史。

  在易用性和生態方面,我們一方面幫助 Flink 社區在 tableAPI,Python,以及 ML 等諸多領域發力,持續提升用戶做 Data science 和 AI 計算的體驗。另一方面,我們也在努力完善 Flink 和其他開源軟件的融合,包括 Hive,以及 Notebook(Zeppelin, Jupyter)等等。這些諸多的努力,都是為了最終實現我們“一套引擎完美解決大數據智能計算”的初衷。Apache Flink 自 2014 年開源至今也才 4 年,我們期待更多的企業和開發者們和我們一起參與到 Apache Flink 的社區和生態建設中來,共同把它打造成為全球最一流的開源大數據引擎。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

分類
發燒車訊

波蘭宣誓加入電動車革命,目標八年100萬量

 

波蘭發展電動車嚴重落後其它歐洲國家,儘管如此,波蘭政府仍決定加入全球電動車革命,並將電動車列為重要政策推動,希望引領相關產業發展。

官方數據顯示,波蘭去年進口新車與中古車共145萬輛,其中電動動車僅有556輛。不過波蘭政府計畫在2025年,將路上行駛的電動車提高至一百萬輛。

波蘭鄰近德國,有很強汽車零件製造能力,但截至目前為止還沒生產過整輛汽車,這對波蘭是項挑戰,更何況是生產電動車。波蘭政府現打算透過設計比賽,希望設計出具波蘭血統且成本比外國車廠便宜的純電動車。

政府政策引導產業的力量極大,波蘭不無追上其它國家的可能。以中國為例,中國工信部副部長辛國斌日前透露,傳統內燃機汽車將設退場時間表,福斯汽車周四隨即宣布,2025年將在中國賣出150萬輛電動車。

(本文內容由授權使用。圖片出處:public domain CC0)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

分類
發燒車訊

Slack賬面資金充裕 或將繞開IPO直接掛牌上市

  騰訊科技訊,據外媒報道,消息人士周二透露,職場協作應用開發公司 Slack 賬面上擁有充足的現金,足以確保這家公司在上市時繞開傳統的首次公開募股(IPO)募集資金,選擇直接掛牌上市。上周末有消息稱,Slack 將效仿 Spotify,選擇直接掛牌上市,繞開傳統的 IPO。

  該消息當時稱,Slack 之所以選擇這種不同尋常的上市方式,是因為其並不需要通過 IPO 來獲得資金或宣傳。據悉,截至 2018 年 10 月,Slack 賬面上擁有約 9 億美元現金。根據這家公司高管在 2018 年年初參加會議時使用的文件,Slack 的虧損幅度已經大幅降低,因此在可預見的未來內已不需要再募集資金。

  最新公布的數據表明,Slack 有能力繞開傳統的 IPO 機制,通過直接掛牌上市。效仿音樂流媒體服務提供商 Spotify 在去年採用的直接掛牌方式上市,Slack 不需要在上市時發行新股募集資金。報道稱,按照 Slack 的規劃,該公司將在截至 2020 年 1 月之前的一年中實現正自由現金流。

  市場普遍的觀點是 Spotify 的直接上市取得了巨大的成功。在上市之前,紐約證券交易所為 Spotify 給出的指導價格每股為 132 美元。該公司上市時以 165.90 美元開盤,較該指導價格上漲 25.7%。Slack 希望取得同樣的成功。《華爾街日報》報道稱,Slack 正與高盛、摩根士丹利和 Allen & Co 就此交易進行合作,上述三家投行也是 Spotify 直接上市的顧問。

  消息人士透露,在截至 2018 年 1 月的上一財年,Slack 的營收為 2.21 億美元。預計在截至 2019 年 1 月的財年中,Slack 的營收將增長 76%,達到 3.89 億美元;預計下一財年將增長 64%,達到 6.40 億美元。截至目前,Slack 方面對此報道未予置評。

  據悉,Slack 計劃在今年第二季度上市。如果能夠成功的完成直接上市,Slack 也將是自 Spotify 之後第二家採用這種上市方式的大型科技初創公司。包括 Airbnb 等計劃在今年上市的科技獨角獸是否會直接掛牌,仍有待於觀察。

  Slack 去年 8 月剛獲得 4.27 億美元H輪融資,估值超過 71 億美元。加上該輪融資募集到的資金,Slack 已累計募集到 12.7 億美元。Slack 擁有眾多的投資人,包括軟銀、Accel、KPCB、GV、DST、Index、安德森-霍洛維茨基金(Andreessen Horowitz)、Social Capital、T. Rowe Price Associates 、Baillie Gifford and Sands Capital、Dragoneer Investment Group 和通用大西洋等。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

分類
發燒車訊

Gogoro增資三億美元,引進高爾創投、新加坡淡馬錫

台灣電動機車商Gogoro(睿能創意)電池交換技術獲國際認同,新一輪C系列三億美元募資,成功吸引到美國前副總統高爾的世代投資管理公司(Generation Investment Management)參與。

Gogoro電動機車從2015年開賣至今,已賣出超過3.4萬部,包含法國電力公司昂吉集團(Engie)、日本住友(Sumitomo),以及新加坡淡馬錫投資公司(Temasek)等,現在都是新加入的投資者。

據金融時報報導,新募資金多數將用於擴張電池交換網路,以及開發相關後端系統科技,Gogoro計畫以人工智能來即時監控交換站電池使用狀況,以及電價波動。

Gogoro創辦人陸學森受訪時表示,前兩代電動機車是出於必要的產物,目的在證明其電池與充電系統的可行性,Gogoro自認比較像能源公司多過機車製造商。陸學森透露已與國外其它車廠洽談合作計畫,將把技術向國際推廣。

(本文內容由授權使用。圖片出處:Gogoro 官網)  

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

分類
發燒車訊

SpaceX裁員 馬斯克的隧道公司卻大舉招人

  受全公司裁員影響的美國加州 SpaceX 員工可能會看到街對面另一家正在招聘的僱主。就在埃隆·馬斯克(Elon Musk)旗下的火箭公司 SpaceX 宣布裁員消息的同一天,這位億萬富翁的地下交通初創企業“隧道公司”(Boring Company)在 Twitter 上發布了一條推文,希望招募人才填補一批空缺職位。

  據報道,隧道公司正在徵集近十幾個工作崗位的應聘申請,其中包括隧道工程和軟件開發崗位。截至目前,這家初創公司雇傭了大約 80 名員工。

  上周,僱用 6000 多名員工的 SpaceX 公司發布通知稱,該公司將裁減約 10% 的員工,其中包括加州霍桑總部的 577 個職位。

  雖然隧道公司開出的每一個崗位可以招募多名人員,但這些職位只佔 SpaceX 裁員崗位職位的一小部分。然而,幾乎同時進行的人事調整表明,兩家備受矚目的馬斯克旗下企業的命運正在發生變化。

  此前,SpaceX 已經表示預計今年的發布速度將放緩,但隧道公司上個月在加州洛杉磯附近開通了一條試驗隧道,正在與芝加哥市政府進行獨家談判,計劃在那裡建造類似地鐵的全新交通系統,此外,隧道公司在美國華盛頓地區的一條隧道也在接受環保評估。

  兩年前,馬斯克創立了隧道公司,這家公司的目標是通過地下隧道系統解決城市交通擁堵問題,尤其是加州洛杉磯市。

  隧道公司的辦公園區不大,但是卻體現了馬斯克異想天開的一面。隧道公司園區內有大量拖車,以及類似港口設施的設備。公司內有一座高塔,由挖掘隧道產生的泥土和磚頭建造,外觀設計的靈感來自於 1975 年的喜劇電影《巨蟒與聖杯》。

  隧道公司停在院子里的挖掘設備被命名為戈多、普魯弗洛克等等,引用了塞繆爾·貝克特、羅伯特·弗羅斯特和T·S·艾略特的文學作品。

  需要指出的是,儘管 SpaceX 進行了裁員,這家航空航天公司未來仍有可能繼續招聘人員。

  馬斯克掌管的加州電動汽車製造商特斯拉公司在 6 月份解僱了9% 的員工后,繼續大舉招聘員工。就在目前,SpaceX 仍然列出了數十個職位空缺,包括上周裁員所影響的一些領域。

  馬斯克旗下的不同企業頻繁出現業務交叉以及資源共享,具體決定於哪些項目最近獲得了馬斯克的最大關注。

  在隧道公司的宣傳視頻中,可以看到特斯拉電動車快速飛馳,另外隧道公司的一部分員工甚至是特斯拉和 SpaceX 這些兄弟企業的志願人員。

  隧道公司的運營主管史蒂夫·戴維斯(SteveDavis)曾是 SpaceX 的高級項目負責人,他也是 SpaceX 公司的一名早期員工。

  在上個月的一次新聞發布會上,馬斯克說,他希望看到下屬公司之間的這種交叉能夠延伸到太空或其他星球上,“我希望有一天我們能在火星上建造隧道,那將是光榮的一天,這意味着我們真的在那裡。”

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!