Каково различие между, делают и gcc?

Вы случайно не используете OSX? Я понимаю, что ab не работает на OSX.

Другая вещь, которую вы можете попробовать, это использовать -k, чтобы использовать флаг поддержания активности, но это может быть не то, что вам нужно.

50000 также близко к максимальному количеству сокетов на интерфейсе, поэтому, возможно, ваши сокеты исчерпаны. Сокеты не могут быть повторно использованы напрямую, потому что они будут в состоянии TIME_WAIT в течение минуты или двух. Точное значение может варьироваться в зависимости от ОС и конфигурации.

Тем не менее, код выглядит тоже хорошо.

Следующий код работал хорошо для меня:

package main

import (
    "fmt"
    "github.com/gorilla/mux"
    "log"
    "net/http"
)


func Echo(w http.ResponseWriter, r *http.Request) {
    v := mux.Vars(r)

    fmt.Fprintf(w, "Echo %v", v["message"])
}


func main() {

    router := mux.NewRouter() //.StrictSlash(true)
    router.HandleFunc("/echo/{message}", Echo).Methods("GET")

    log.Println("Running server....")

    log.Fatal(http.ListenAndServe("localhost:8080", router))
}

И дает следующие результаты:

ab -c 500 -n 50000 localhost:8080/echo/foobar
This is ApacheBench, Version 2.3 <$Revision: 1807734 [111]gt;
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests


Server Software:        
Server Hostname:        localhost
Server Port:            8080

Document Path:          /echo/foobar
Document Length:        12 bytes

Concurrency Level:      500
Time taken for tests:   2.471 seconds
Complete requests:      50000
Failed requests:        0
Total transferred:      6450000 bytes
HTML transferred:       600000 bytes
Requests per second:    20233.39 [#/sec] (mean)
Time per request:       24.712 [ms] (mean)
Time per request:       0.049 [ms] (mean, across all concurrent requests)
Transfer rate:          2548.93 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   18 122.8      3    1034
Processing:     0    5  14.9      4     225
Waiting:        0    4  14.7      3     222
Total:          1   24 132.7      6    1245

Percentage of the requests served within a certain time (ms)
  50%      6
  66%      7
  75%      7
  80%      7
  90%     12
  95%     20
  98%     30
  99%   1040
 100%   1245 (longest request)

Это выполняется в Ubuntu 18.04.

32
задан Léo Léopold Hertz 준영 20 April 2009 в 14:00
поделиться

10 ответов

Ну ... gcc - это компилятор, make - это инструмент, помогающий создавать программы. Разница огромная. Вы никогда не сможете собрать программу, используя только make; это не компилятор. Что делает, он представляет отдельный файл «правил», который описывает, как перейти от исходного кода к готовой программе. Затем он интерпретирует этот файл, выясняет, что нужно скомпилировать, и вызывает gcc для вас. Это очень полезно для больших проектов с сотнями или тысячами файлов исходного кода, а также для отслеживания таких вещей, как параметры компилятора, пути включения и т. Д.

60
ответ дан 27 November 2019 в 19:50
поделиться

gcc - это компилятор C: он берет исходный файл C и создает машинный код в виде несвязанного объекта файлы или как фактическая исполняемая программа, которая была связана со всеми объектными модулями и библиотеками.

make полезен для управления процессом сборки проекта. Типичная программа на С состоит из нескольких модулей (.c) и заголовочных файлов (.h). Всегда будет компилироваться все после того, как вы что-то измените, поэтому make предназначен для компиляции только тех частей, которые должны быть перекомпилированы после изменения.

Это выполняется в соответствии с правилами, созданными программистом. Например:

foo.o: foo.c foo.h
    cc -c foo.c

Это правило указывает make, что файл foo.o зависит от файлов foo.c и foo.h, и, если любой из них изменится, его можно построить, выполнив команду во второй строке. (Выше приведен неверный синтаксис: make хочет команды с отступом от символов табуляции, что я не могу сделать в этом режиме редактирования. Впрочем, представьте, что он здесь.)

make считывает свои правила из файла, который обычно называется Makefile. Поскольку эти файлы (традиционно) пишутся вручную, в make есть много волшебства, позволяющего вам сократить правила. Например, он знает, что foo.o может быть собран из foo.c, и знает, что это за команда. Таким образом, вышеприведенное правило можно сократить до следующего:

foo.o: foo.h

Небольшая программа, состоящая из трех модулей, может иметь такой Makefile:

mycmd: main.o foo.o bar.o
    $(CC) $(LDFLAGS) -o mycmd main.o foo.o bar.o
foo.o: foo.h bar.h
bar.o: bar.h

make может делать больше, чем просто компилировать программы. Типичный Makefile будет иметь правило для очистки нежелательных файлов:

clean:
    rm -f *.o core myapp

Другое правило может запускать тесты:

check: myapp
    ./myapp < test.input > test.output
    diff -u test.correct test.output

Makefile может «создавать» документацию: запустить инструмент для преобразования документации из некоторого языка разметки в HTML и PDF, например. ,

Makefile может иметь правило установки для копирования бинарной программы, которую он собирает, куда бы пользователь или системный администратор не захотел ее установить.

И так далее. Поскольку make является универсальным и мощным средством, он обычно используется для автоматизации всего процесса от распаковки архива с исходным кодом до момента, когда программное обеспечение готово для использования пользователем.

Существует множество полезных сведений о make, если Вы хотите изучить это полностью. GNU-версия make имеет особенно хорошую документацию: http://www.gnu.org/software/make/manual/ содержит ее в различных формах.

обычно он используется для автоматизации всего процесса от распаковки исходного архива до момента, когда программное обеспечение будет готово для использования пользователем.

Существует много полезного, чтобы узнать о make, если вы хотите изучить его полностью. GNU-версия make имеет особенно хорошую документацию: http://www.gnu.org/software/make/manual/ содержит ее в различных формах.

обычно он используется для автоматизации всего процесса от распаковки исходного архива до момента, когда программное обеспечение будет готово для использования пользователем.

Существует много полезного, чтобы узнать о make, если вы хотите изучить его полностью. GNU-версия make имеет особенно хорошую документацию: http://www.gnu.org/software/make/manual/ содержит ее в различных формах.

12
ответ дан 27 November 2019 в 19:50
поделиться

Make often uses gcc to compile a multitude of C or C++ files.

5
ответ дан 27 November 2019 в 19:50
поделиться

gcc компилирует и / или связывает один файл. Он поддерживает несколько языков, но не знает, как объединить несколько исходных файлов в нетривиальную, запущенную программу - вам обычно потребуется как минимум два вызова gcc (compile и link) для создания даже самых простых программ.

Страница Википедии на GCC описывает это как «систему компиляции»:

Коллекция компиляторов GNU (обычно сокращенная до GCC) - это система компиляторов, созданная проектом GNU, поддерживающая различные языки программирования.

make - это «инструмент сборки», который вызывает компилятор (который может быть gcc) в определенной последовательности, чтобы скомпилировать несколько источников и связать их вместе. Он также отслеживает зависимости между различными исходными файлами и объектными файлами, возникающие в результате компиляции источников, и выполняет только операции с компонентами, которые изменились со времени последней сборки.

GNUmake - одна из популярных реализаций make. Описание от GNUmake выглядит следующим образом:

Make - это инструмент, который управляет генерацией исполняемых и других не исходных файлов программы из исходных файлов программы.

Make получает знания о том, как собрать вашу программу из файл под названием makefile,

4
ответ дан 27 November 2019 в 19:50
поделиться

make uses a Makefile in the current directory to apply a set of rules to its input arguments. Make also knows some default rules so that it executes even if it doesn't find a Makefile (or similar) file in the current directory. The rule to execute for cpp files so happens to call gcc on many systems.

Notice that you don't call make with the input file names but rather with rule names which reflect the output. So calling make xyz will strive to execute rule xyz which by default builds a file xyz (for example based on a source code file xyz.cpp.

4
ответ дан 27 November 2019 в 19:50
поделиться

Вы можете использовать make для компиляции ваших программ на C и C ++, вызывая gcc или g ++ в вашем make-файле для выполнения всей компиляции и связывая шаги, позволяя вам сделать все эти шаги одной простой командой. Это не замена для компилятора.

3
ответ дан 27 November 2019 в 19:50
поделиться

gcc - это компилятор, подобный javac . Вы даете ему исходные файлы, он дает вам программу.

make - это инструмент для сборки. Он принимает файл, который описывает, как создавать файлы в вашем проекте на основе зависимостей между файлами, поэтому, когда вы меняете один исходный файл, вам не нужно перестраивать все (например, если вы использовали скрипт сборки). make обычно использует gcc для фактической компиляции исходных файлов.

3
ответ дан 27 November 2019 в 19:50
поделиться

'gcc' - это компилятор - программа, которая фактически превращает исходный код в исполняемый файл. Вы должны указать ему, где находится исходный код, что выводить, и другие различные вещи, такие как библиотеки и опции.

'make' больше похож на язык сценариев для компиляции программ. Это способ скрыть все детали компиляции вашего исходного кода (все эти аргументы, которые вы должны передать компилятору). Вы пишете все вышеперечисленные детали один раз в Makefile, поэтому вам не нужно вводить его каждый раз для каждого файла. Он также будет делать изящные вещи, такие как только перекомпиляция исходных файлов, которые были обновлены, и обрабатывать зависимости (если я перекомпилирую этот файл, мне потребуется перекомпилировать файл THAT).

2
ответ дан 27 November 2019 в 19:50
поделиться

gcc compiles and/or links a single file. It supports multiple languages, but does not knows how to combine several source files into a non-trivial, running program - you will usually need at least two invocations of gcc (compile and link) to create even the simplest of programs.

Wikipedia page on GCC describes it as a "compiler system":

The GNU Compiler Collection (usually shortened to GCC) is a compiler system produced by the GNU Project supporting various programming languages.

make is a "build tool" that invokes the compiler (which could be gcc) in a particular sequence to compile multiple sources and link them together. It also tracks dependencies between various source files and object files that result from compilation of sources and does only the operations on components that have changed since last build.

GNUmake is one popular implementation of make. The description from GNUmake is as follows:

Make is a tool which controls the generation of executables and other non-source files of a program from the program's source files.

Make gets its knowledge of how to build your program from a file called the makefile, which lists each of the non-source files and how to compute it from other files.

13
ответ дан 27 November 2019 в 19:50
поделиться

make по сути является экспертной системой для построения кода. Вы устанавливаете правила для того, как вещи построены, и от чего они зависят. Затем Make может просмотреть временные метки всех ваших файлов и точно определить, что нужно перестраивать в любое время.

gcc - это «коллекция компиляторов gnu». Есть много языков, которые он поддерживает (C, C ++, Ada и т. Д. В зависимости от вашей настройки), но все же это всего лишь один инструмент из многих, которые make может использовать для сборки вашей системы.

4
ответ дан 27 November 2019 в 19:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: