Heim  >  Artikel  >  Backend-Entwicklung  >  Eine vorläufige Untersuchung von Nginx main ngx_init_cycle() (Teil 1)

Eine vorläufige Untersuchung von Nginx main ngx_init_cycle() (Teil 1)

WBOY
WBOYOriginal
2016-08-08 09:28:471236Durchsuche

Eine vorläufige Studie der Nginx-Hauptfunktion ngx_init_cycle() (Teil 1)

Da die Funktion ngx_init_cycle() sehr umfangreich ist, wird hier nur die Funktionsaufrufbeziehung der ersten über 400 Zeilen angegeben. und die letzten 400+ werden in einem späteren Artikel in besprochen.

-->ngx_init_cycle(&init_cycle)
	    -->ngx_timezone_update()
		    -->time()
			-->localtime()注1:
		-->ngx_timeofday()
		-->ngx_time_update()
		    -->ngx_gettimeofday() -- gettimeofday()
			-->ngx_gmtime()
			-->ngx_localtime()
			-->ngx_memory_barrier()
		-->ngx_increase_pipe_generation()
		-->ngx_create_pool()
			-->ngx_memalign() --  ngx_alloc(size, log)
		-->ngx_pcalloc()
		    -->ngx_palloc()
			    -->ngx_align_ptr()注2:
			    -->ngx_palloc_block()
			        -->ngx_memalign()
				    -->ngx_align_ptr()
			    -->ngx_palloc_large()
			        -->ngx_alloc()
				        -->malloc()
				    -->ngx_palloc()	
			-->ngx_memzero()
			    -->memset()
		-->ngx_list_init()
		    -->ngx_palloc()
		-->ngx_queue_init()
		-->ngx_strlen() -- strlen()
		-->ngx_pnalloc()
		    -->ngx_palloc_block()
			-->ngx_palloc_large()
		-->ngx_strlow()
		    -->ngx_tolower() -- ((c >= 'A' && c <= &#39;Z&#39;) ? (c | 0x20) : c)
		-->ngx_array_create()
		    -->ngx_palloc()
			-->ngx_array_init()
			    -->ngx_palloc()
		-->ngx_conf_param()
		    -->ngx_memzero()
			-->ngx_conf_parse()
		-->ngx_conf_parse()
		    -->ngx_open_file()  -- open()
			-->ngx_fd_info()  -- fstat()
			-->ngx_alloc()
			-->ngx_conf_read_token()
			    -->ngx_file_size()
				-->ngx_memmove()  --  memmove()
				-->ngx_read_file()   -- read()
				-->ngx_write_console() -- ngx_write_fd()
				    --> write()
				-->ngx_array_push()
			-->ngx_conf_handler()
		-->ngx_show_dso_directives()
		    -->ngx_get_conf()
		-->ngx_is_dynamic_module()
		    -->ngx_get_conf()
		-->ngx_test_lockfile()
		    -->ngx_open_file()
			-->ngx_close_file()
			-->ngx_delete_file()
		-->ngx_create_paths()
		    -->ngx_create_dir() -- mkdir()
			-->ngx_file_info()
		-->ngx_log_open_default()
		    -->ngx_conf_open_file()

Im Folgenden sind die Verwendungs- und Wissenspunkte unbekannter Funktionen aufgeführt:

Hinweis 1: Die Funktionen time() und localtime() werden nicht von Nginx selbst implementiert, sondern sind Bibliotheksfunktionen. Seine Verwendung ist wie folgt:

/**
	 * filename:    test_localtime.c
	 * description: used to see the usage of function localtime()
	 * date:        2015-03-06
	 * author:      HowardKing
	 * version:     1.0
	 */


	#include <stdio.h>
	#include <stdlib.h>
	#include <time.h>


	int main(void)
	{
			time_t timer; // time_t is long int
			struct tm *tblock;


			time(NULL);
			tblock = localtime(&timer);
			printf("Local time is: %s", asctime(tblock));


			return 0;
	}

Ergebnis der Programmausgabe:
<span style="white-space:pre">	</span>Local time is: Fri Jul 31 05:00:00 4461676


Hinweis 2: Der lange Typ in der C-Sprache entspricht der Maschinenwortlänge, während der int-Typ im Allgemeinen 4 ist Bytes.

/**
	 * filename:    test_unsigned_long.c
	 * description: find out the size of type long
	 * date:        20150306
	 * author:      HowardKing
	 * version:     v1.0
	 */


	#include <stdio.h>
	#include <stdlib.h>


	int main(void)
	{
			int ii = 100;
			unsigned long ll = 100;


			printf("%d\n", sizeof(ii));
			printf("%d\n", sizeof(ll));


			return 0;
	}

Ergebnis der Programmausgabe:
	4
	8

Das Obige stellt die Haupterkundung von Nginx ngx_init_cycle() (Teil 1) vor, einschließlich der relevanten Inhalte. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Notizen zur Laravel-StudieNächster Artikel:Notizen zur Laravel-Studie